Compare commits

..

159 Commits

Author SHA1 Message Date
Clemens Schwaighofer
70a30c3182 Javascript byte human readable functions
Add a new format bytes with using bytes for lowest tear instead of 0.n
kb

Add a new reverse function to convert from human readable bytes to byte
number
2021-05-20 10:25:37 +09:00
Clemens Schwaighofer
9d54d6b0d1 Bug fix in human readable byte convert 2021-05-19 11:01:23 +09:00
Clemens Schwaighofer
a46888d101 Supress array errors in form generate 2021-05-17 09:35:09 +09:00
Clemens Schwaighofer
be092fc449 Add some missing array set checks 2021-05-17 08:57:50 +09:00
Clemens Schwaighofer
6059b83637 Fix IMG_PNG constant error, jquery update, other minor fixes
Big fix with IMG_PNG constant use. Switched to IMAGETYPE_*

Some code cleanup in config files (array, DEFINE->define, etc)

Code cleanup in DB:IO class, especially for consistent returning
array/single data blocks

Some javascript core lib update
2021-04-28 11:03:26 +09:00
Clemens Schwaighofer
b6c6d76b43 Basic::json handling, better string to bytes function
Some basic json string to array with second function to check last
cought error.

Updated string to bytes convert to make it shorter and more compact

Some minor fixes in DB::IO helper methods
2021-02-09 14:55:32 +09:00
Clemens Schwaighofer
80993a06ac Main Template CORE css/js, remove unused JS code, fix method names DB/IO
DB::IO all public names are prefixed with db. All others are set as
deprecated.
2021-02-09 06:49:30 +09:00
Clemens Schwaighofer
50073479d4 Last login value, minor update for array to [, smarty include core
When logged in, the last loggedin time is stored in the edit_user table,
additional to the normal logging.

More array() to [] conversion in config files, etc

Javascript: add math.round

Basic Class: Fix key length array mapping to more efficiont loop run
DB/IO: some name fixes in get key function description/comments
SmartyExtended: add CORE CSS/JS file include if exists. Follows after
MAIN and BEFORE page and special
2021-01-21 06:55:28 +09:00
Clemens Schwaighofer
85f701ab2a Core Class Updates
Basic: remove all error handling override for any class vars to avoid
exploiting private/public/protected settings

Basic: Add MIME lookup table with array. So you can return a File name
description (human understandable) to a mime handler.
See mimeInitApps for basic list

IO: Bug fix for counting prepared statment place holders. If there are
$1, $1, $2 then those are TWO and not THREE

IO: various wrappers for returning PK, Extended return set, Number for
rows
Those will be extended to all variables
2020-11-25 20:38:25 +09:00
Clemens Schwaighofer
519de8a23c Fix smarty extended variable access check 2020-09-08 11:33:50 +09:00
Clemens Schwaighofer
d5fdb22e93 Remove all __set/__get class variable check
It ultimate failed for the following reason.

If base class is passed on to some other class as object parameter
then accessing protected/private variables will be possible because the
__get method will interfer.
Also __set of protected/private variables is possible.

I rather run check for setting variables without defining them than
haveing open protected/private var access
2020-09-08 11:24:15 +09:00
Clemens Schwaighofer
0ec0007569 Fix for edit tables declare, add return function for DB IO
DB IO return functions for inserted primary key and extended RETURNING
data

Add dev set for html options grouping addition for nested arrays/object
lists

Fix edit tables edit access uid declaration
2020-09-07 07:09:23 +09:00
Clemens Schwaighofer
7165a50b4d edit* table updates, config master updates, edit js updates
Add password reset time/uid for a password reset flow
Add password valid regex check constants in master config
Add deep copy javascript object instead of direct copy to truly create
new element for attaching in the cel flow
Add attach array of cel elements intead of object with cel sub block
2020-08-26 15:42:30 +09:00
Clemens Schwaighofer
71ee80fa06 Add javascrip function check & call from string functions
Check if a string is a function.
And call this string with arguments.

Update SQL files for better layout order
2020-07-21 11:30:34 +09:00
Clemens Schwaighofer
bb5276ee44 Smarty test, Basic class debug function upate
Write out debug data had two nested ifs that are combined into one if

Smarty test update with loop
2020-07-01 07:12:06 +09:00
Clemens Schwaighofer
9c242ed1b9 Psalm config update, add JS object deep copy function 2020-06-25 15:05:32 +09:00
Clemens Schwaighofer
0fcbe91ea2 Ignore vscode settings folder 2020-06-19 09:12:10 +09:00
Clemens Schwaighofer
ee4417fc52 Settings update for phpstan 2020-06-18 13:49:57 +09:00
Clemens Schwaighofer
ee1dafd8d8 PHP stan settings update, vscode config file 2020-06-18 13:44:57 +09:00
Clemens Schwaighofer
96104095d0 Flatpickr update, minor fixes in edit base javascript 2020-06-12 09:53:31 +09:00
Clemens Schwaighofer
a311552c56 Bug fixes for not initialized array calls 2020-05-29 06:30:53 +09:00
Clemens Schwaighofer
f694539a0b ignore switch with only default call 2020-05-11 08:46:01 +09:00
Clemens Schwaighofer
2f1388494f Remove standard js lib comments 2020-05-11 08:18:57 +09:00
Clemens Schwaighofer
06fe9657e2 Stub fo convert encoding string is actual source encoding check 2020-04-10 10:04:42 +09:00
Clemens Schwaighofer
d4e5f92277 Add DB/IO max loop override
The max query call loop checker can be set to any number, or overridden
with -1

call dbSetMaxQueryCall

on set with -1 will throw warning, if not larger than 0 will throw error

if called with null or empty, it will reset to default value

get current set value with dbGetMaxQueryCall
2020-04-08 17:30:40 +09:00
Clemens Schwaighofer
b2c0a57924 javascript hide overlay with auto hide if element id given 2020-03-30 09:10:43 +09:00
Clemens Schwaighofer
5522348c8a edit.js update
This is jquery only update

Add new overlay and action indicator for auto any overlay boxes.
Stack with GS_OB_S and min zIndex layer 10 and raise +1 for each new
show overlay call and lower for each hide call
2020-03-11 18:05:03 +09:00
Clemens Schwaighofer
ed01d248ec Minor updates for database base declare scripts 2020-03-06 15:28:32 +09:00
Clemens Schwaighofer
899ddc011c edit*js files update 2020-03-03 09:41:49 +09:00
Clemens Schwaighofer
a86eaf0f02 Add aelxar js method, fixes for core libs, edit base file
aelxar is like aelx but it uses an array and does not use objects
directly

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

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

Basic lib has a dummy uniq id method added. Not yet finished
2020-01-22 14:55:23 +09:00
Clemens Schwaighofer
d9e13ae14c Updates and fixes to CoreLibs
- fixed all DEFINE to define in config* files
- Updates Login class with missing strict declarations
- some fixes in Login class for possible errors
- Basic class return array layout updates for all rgb sets plus correct
  static update
- Basic class timestamp method fix for not full set (eg missing seconds)
- Basic class add method for getting linecount from a file
- DB IO class gets a get settings return value method
2020-01-07 15:45:24 +09:00
Clemens Schwaighofer
50db770992 Move the convert config setting to config other
the convert constant setting for inmage magick is now in config.other as
it is no longer core

Also add the base Progress and functions perl modules for central
tagging.

We will add config.pm, import_functions.pm, layout.pm and a basic test
script later too
2019-12-11 18:02:42 +09:00
Clemens Schwaighofer
e439945a54 Add edit_base* with admin/frontend folder file listing
Before it only listed files in current directory. Because of the hard
split select from both.
Add hostname/folder input (optional) to prefix files outside the same
folder.

Note: If no hostname/folder is set and two files in admin and frontend
have the same name they will be both highlighted as the point to the
same place.
2019-12-11 16:08:00 +09:00
Clemens Schwaighofer
8223441ca9 Add Front folder for web fonts
The font folder is set in the layout folder for frontend and holds web
fonts.

There is a new symlink folder in the libs directory to match the FONT
folder name for backend fonts
2019-12-11 13:54:37 +09:00
Clemens Schwaighofer
0153c9721f Add missing return in CoreLibs Basic internal url parser
Just to fulfill check, is only used internal
2019-12-06 15:35:07 +09:00
Clemens Schwaighofer
b6f6eeac9b Update byteStringFormat with si units and bitwise mask
The old method name byteStringFormat is currently deprecated and it is
recommended to move to the new humanReadableByteFormat method.
Difference is that the new version uses a bitfield settings mask
BYTE_FORMAT_NOSPACE, BYTE_FORMAT_ADJUST, BYTE_FORMAT_SI
2019-12-06 15:29:06 +09:00
Clemens Schwaighofer
beedf629e5 Fixups for phan 2.4.4 run checks
Lines with @phan HACK comment are added to supress phan warnings, but do
actually no additional work.
On newer phan version those lines should be checked and removed if
needed
2019-12-05 16:01:44 +09:00
Clemens Schwaighofer
04b47574eb CoreLibs\Basic arrayDiff for full array diff
PHP array_diff only compares missing elements in the second and existing
in the first so a full diff is only achieved if compares both ways (a,b)
and (b,a)
This function uns a full compare and returns difference in an array
2019-12-04 12:12:43 +09:00
Clemens Schwaighofer
ecc52e2dbd Basic class if layout fixes 2019-11-28 15:44:39 +09:00
Clemens Schwaighofer
12e335c69c Move fileUploadErrorMessage from Admin\Backend to Basic
Also removed the auto translate, return just string.
Is also a static method so can be called by
Basic::fileUploadErrorMessage too

Removed left over LANG settings in admin header
2019-11-15 17:53:21 +09:00
Clemens Schwaighofer
3ae3b1b761 Simplify language calls
There are no more lang vars passed on to any class calls
The new order is the following
$OVERRIDE_LANG > _SESSION > SITE_LANG > DEFAULT_LANG

Todo: make the setLang better so we do not have the same method in
Backend/Generic/SmartyExtended
2019-11-15 17:07:35 +09:00
Clemens Schwaighofer
3c9ca025f5 Smarty Extended split out cms var merge & content render
The down merge of outside class smarty vars is now an extra function
that can be called stand alone.

The smarty render function call is also a stand alone function that can
be called from outside
2019-11-15 15:20:12 +09:00
Clemens Schwaighofer
96afa463e0 Smarty Extended add method documentation 2019-11-15 14:47:40 +09:00
Clemens Schwaighofer
5195212fae Smarty Extended move set paths method on top 2019-11-15 14:43:22 +09:00
Clemens Schwaighofer
e990d6b410 Smarty Extended class update
Move all smarty and path settings into the Smarty Extended class

the include files <admin|frontend>_set_paths.php and <admin|frontend>_smarty.php

are deprecated.

For special frontend smarty (which will be not used in future anyway) a
dedicated sub class to Smarty Extended with its own methods should be
created
2019-11-15 14:15:12 +09:00
Clemens Schwaighofer
b5dd85bc75 add test images 2019-11-05 18:09:26 +09:00
Clemens Schwaighofer
b2945a8fa0 Update Create Thumbnail calls in Basic class
ImageMagick direct convert call uses pre-set vars
GD Thumbnail creator can create dummy thumbnails if they are not in the
normal convertable type
2019-11-05 14:01:21 +09:00
Clemens Schwaighofer
c77562b595 config master update
- use config.other.php to include other none core settings
- fix tab intends for not used defines
- remove old ACL defines that are not needed
- move BASE_NAME out to new area

TODO: think about removing G_TITLE
TODO: think about BASE_NAME external setting
2019-10-29 12:00:55 +09:00
Clemens Schwaighofer
2210f62441 Simple Thumbnail with GD only, base config master update, test images add 2019-10-28 16:39:46 +09:00
Clemens Schwaighofer
dfb2a93fbd Basic class add two new methods
correctImageOrientation: fixes the orientation of a JPEG image with
the exif Orientation header set

uuidv4: creates a uuid v4 string
2019-10-16 18:58:19 +09:00
Clemens Schwaighofer
ca073c1b56 Fix JS key in object check function
instead of using "in" which could return true for other entries in the
object use the proper hasOwnProperty call
2019-10-16 15:08:08 +09:00
Clemens Schwaighofer
f316dde8b7 CoreLibs Fix mandator check & sub group checks for unique input 2019-10-09 10:55:54 +09:00
Clemens Schwaighofer
13b18c3a62 Add ajax page flag to basic class and updated login class to reflect this 2019-10-08 18:34:29 +09:00
Clemens Schwaighofer
18bf829c6b Fix JS comments 2019-10-04 18:56:23 +09:00
Clemens Schwaighofer
723b6345bb Info text about target base library for edit.js 2019-10-04 11:38:41 +09:00
Clemens Schwaighofer
e235721c8b Update JQUERY to jdocs3 comment style 2019-10-04 11:33:54 +09:00
Clemens Schwaighofer
fd0af5a294 Update Login class to return login screen with reset _POST
Login class checks if AJAX_PAGE is set to true and then does not print
the login html to the screen directly, but returns it in the _POST array
login_html, _POST action is set to login
It also resets _POST & _GET arrays before hand to avoid any misuese.
All _SESSION array access needs to be checked in any following class as
the _SESSION is unset in this moment

html element should be overwritten with this JS:
document.getElementsByTagName('html')[0].innerHTML  =
data.content.login_html;
2019-10-03 15:37:06 +09:00
Clemens Schwaighofer
fd8caaf5de htaccess update for short open tag 2019-10-02 11:54:19 +09:00
Clemens Schwaighofer
3d842d4107 Missing strict declares, Progress bar init, missing site config bail
In master config if there is no site config for this page, bail out.
In the other config pages the strict declare header was missing.

Progress bar inits the progress array with all set to null to avoid
calls on not set index
2019-10-01 15:43:50 +09:00
Clemens Schwaighofer
c895beb35f IO: reset field names update
instead of set to array, set to null as we fully reset this entry
2019-09-30 15:57:23 +09:00
Clemens Schwaighofer
b6a35d15cf Basic: resurcive array search, IO unset fix
Basic: recusrive array search has correct parameter declarations &
checks for null/empty/not string

IO: all unset are removed and null or init to array is used to reset

Update for other include pages with some missing default data
2019-09-30 15:52:14 +09:00
Clemens Schwaighofer
20c44694e8 Default config fix for HOST_NAME and example db host array update 2019-09-26 15:03:00 +09:00
Clemens Schwaighofer
f6424bdd35 Minor updates for set checks, example update for host config
Host config example for a pre-set config array to attach.

Update fixes for admin_set_paths, ACL\Login unset variable/index check
2019-09-26 12:36:54 +09:00
Clemens Schwaighofer
ea3a8edae6 phpstan tmp dir folder name fix 2019-09-24 14:16:08 +09:00
Clemens Schwaighofer
d04cc380b2 Set phpstan tmp dir, Basic class check date/time empty date fix
set explicit tmp folder for phpstan to not overlap with other users

Basic class return false for unset date or datetime parameter
2019-09-24 14:12:33 +09:00
Clemens Schwaighofer
98bf11e0c9 Bug fix in Basic class string to bytes convert 2019-09-20 16:25:14 +09:00
Clemens Schwaighofer
a6918bac6f phpstan config update, move const in basic into class
the basic class const for self checks are class const variables now
2019-09-20 14:53:27 +09:00
Clemens Schwaighofer
86c5085f92 php-pan/stan test pages update 2019-09-20 14:35:04 +09:00
Clemens Schwaighofer
63bcdc0eff Fixes for array ( calls, fixes for phan warning reports
Renamed all array ( to array( that where left over

Fixed various minor bugs for phan level 0 reporting
2019-09-20 13:15:09 +09:00
Clemens Schwaighofer
ef1df6f171 Switch all array init calles to no space before bracket
Also bug fix in Form General for load int PK calls with non int types
2019-09-20 11:10:13 +09:00
Clemens Schwaighofer
8ade113070 autoloader update, config master, db io minor fixes
Various not needed isset checks removed
autoloader correctly checks that "LIB" is at the end of the path only
2019-09-19 18:54:46 +09:00
Clemens Schwaighofer
4508692330 Bug fix for translation class, DB IO connection error set fix
- The translation file reader did an isset on a set variable insetad of
checking if the variable is zero and so never started the translation
system
- The DB IO connection not set was wrongly set. If the connection failed
it is not TRUE and else FALSE. There is a new internal method
getConnectionStatus to query this status it returns TRUE/FALSE depending
if the connection failed

- Update the l10n test page with proper translation tests
  - init OK
  - show current lang/file
  - translation test
  - switch language test
2019-09-19 15:30:04 +09:00
Clemens Schwaighofer
98c87a755a Switch config default JS lib from Prototype to Jquery 2019-09-19 13:11:54 +09:00
Clemens Schwaighofer
bf96eb755d Fix all classes with PHP-DOC style method comments
Also various fixes for clean phan run
Update config base for array type host settings and no long single
entries
2019-09-19 11:56:27 +09:00
Clemens Schwaighofer
9ea8364aab phpan/phpstan clean up runs, minor update to DB\IO
DB\IO dbReturn method has a third parameter to set read only assoc and
not number data from the query

Install basic composer for trying out psalm

setting phpan/phpstan for basic static checking and do basic clean up on
all of the files
2019-09-18 09:25:35 +09:00
Clemens Schwaighofer
25941f4b49 Fix in explode in Basic class 2019-09-13 16:59:10 +09:00
Clemens Schwaighofer
56612cb13b Clean up for move to .php files an phan checks 2019-09-13 16:08:49 +09:00
Clemens Schwaighofer
d9ad041c47 Renamed all .inc PHP files to .php and replaced all .inc calls
Because .inc style is deprecated and also dangerious as often not setup
correctly on the server all .inc files have been renamed to .php files.

All internall calls have been udpated.
2019-09-13 15:47:37 +09:00
Clemens Schwaighofer
5558a21824 Composter update to 1.9.0 2019-09-13 10:43:07 +09:00
Clemens Schwaighofer
05c48bce60 Bug fixes for Language and DB\IO class
language class needs to have l var set as public
db\io convert encoding function needs to work with false method
parameters as the return can be false and needs a clean pass through in
this case
2019-09-12 16:53:09 +09:00
Clemens Schwaighofer
b25f280849 Add Base class set/get variable error check, strict updates
The base class has now set/get class variable check handlers.
Default they are off and setting undefined variables in a class works as
before.
The flag can be set to throw an error on an unset var but let var still
be set or also surpress setting and unset var.
This can be controlled via setting for the last parameter in class init
or the global var $CLASS_VARIABLE_ERROR_MODE or in the config file the
constant CLASS_VARIABLE_ERROR_MODE (constant > global). Note that if a
global or constant is set the class constructor setting will be
overridden.

Backend/IO/Basic/Login classes are set to be type safe as much as possible if
called from a strict defined php script.

Added random key generator function to the basic class and removed the
random key definitons from the Backend class.
- randomKeyGen
- initRandomKeyLength

Updated the basic bytes to string and string to bytes functions.

Added hrRunningTime method to use the hrtime for precise running time
calculations. Default returns running time in ms. Can be set via
parameter to ns (lowest), ys, ms, s.
The old runningTime method is still there, but it is recommended to use the
hrRunningTime method instead

Removed Error Handling method in Basic, as there is no need for it
there. The is a master one in lib Folder Error.Handling.inc if needed.

Currently Generate/ArrayIO are not 100% type safe [because they are only
used in the edit_base anyway]
2019-09-11 16:10:28 +09:00
Clemens Schwaighofer
745faacb30 htaccess update with xdebug settings 2019-09-10 17:29:43 +09:00
Clemens Schwaighofer
fd2e0937b5 Fixes for the E_NOTICE fix update
- reference save was not 100% correct with isset/empty checks
- more missing fixes in admin_*inc files for non edit_* pages
- non edit page menu build fix
- fix non set smart core vars
- add update SQL for fixing missing cuid in edit_* tables
2019-09-10 14:33:50 +09:00
Clemens Schwaighofer
6be1b3008e Disable edit base POST debug output 2019-09-10 11:29:09 +09:00
Clemens Schwaighofer
46554e6965 Update to make all class E_NOTICE safe, add page_content
- ALL classes are E_NOTICE safe as far as possible.
There might be some minor things left over which will be cleaned up in
further testing

- Added declare(strict_types=1); on all pages for trying to make all
calls strict

- Added page_content sub content to edit_page, with this some inner page
content with ACL can be set, eg for use with Ajax/JS calls with backend.
Also alias can be set so the control ajax pages can back reference to
the master page content setting. Currently only one back reference is
allowed

- Note that the PAGES array has no numeric indexes, but uses the cuid as
index
2019-09-10 11:05:30 +09:00
Clemens Schwaighofer
c8686024e2 Add .htaccess to override global php settings
This is for working on E_ALL fix for core libs before we can turn it on
global
2019-09-06 18:21:14 +09:00
Clemens Schwaighofer
605ea06bf0 Add additional_acl column to edit_access table
To be able to have special ACL (json) for edit edit access table too
2019-09-03 09:39:12 +09:00
Clemens Schwaighofer
9ec19f5940 Add list ACR, select update for html options JS, array methods in Basic
* ACR list has new list at level 10 for listing but not reading/opening
* JS update for the html options create
if select multi allow selected as array for highlight
* Basic Class
- array merge recursive implementation
proper implementation that proper merges nested arrays. With key is
always string override
- array flat per key
For multi arrays flatten down a key -> value entry to set the value to
the level up in the leaf
eg:
foo -> bar -> KEY: value
and you go by KEY as search it will change to
foo -> bar: value
2019-08-30 13:02:02 +09:00
Clemens Schwaighofer
a27e4603a8 Add deleted to edit_group/user decl, add assoc only return for fetchrow
DB IO Fetchrow has assoc only true/false
Currently only tested with PgSQL

default returns both,
if set true only returns assoc
2019-08-28 18:49:23 +09:00
Clemens Schwaighofer
54b7af348b Add fix for DB Array IO json error_check type field storage on empty save 2019-08-27 16:01:29 +09:00
Clemens Schwaighofer
c5d624a318 Add Additional ACL jsonb field to edit_pages table 2019-08-27 15:15:40 +09:00
Clemens Schwaighofer
47ffec1fd4 Add JSON additional ACL field to edit user page 2019-08-26 11:18:21 +09:00
Clemens Schwaighofer
72c6844e74 Jquery update to 3.4.1 2019-07-31 17:59:13 +09:00
Clemens Schwaighofer
d0753512a3 Fix path calls, add better js html options block
in admin set paths, only call smarty sets if smarty object is initalized

Add better JS html options creation with multi block allow. Old call is
still there as wrapper to new call html_options_block

missing variable init in Class Basic
2019-07-31 15:36:28 +09:00
Clemens Schwaighofer
d0de3821f8 Basic class date diff calc fix for including last day 2019-07-08 12:02:15 +09:00
Clemens Schwaighofer
0d89eea1af Basic class fix for calc interval, smarty test page fix
- smarty test page used old variable names
- the interval date calc function was private but should be public
static
2019-06-28 11:50:40 +09:00
Clemens Schwaighofer
d87033d57d Update include files for more cleaner work 2019-06-28 10:13:40 +09:00
Clemens Schwaighofer
19a44d9340 Clean up edit_* pages, some config changes, bug fixes
- Class Basic convert string to bytes fix
- admin edit_* pages do not need JS except pop call, moved that into the
template and do not load any other JS anymore
- changed the EDIT_STYLESHEET/JAVACSRIPT names to ADMIN_ to give them
the proper name that they are admin based functions
- paths are in an extra config file
- plan on moving edit_* css rules into a special CSS file just for this
2019-06-27 14:41:56 +09:00
Clemens Schwaighofer
436025dd22 admin includes updates, Class L10n fix
- Class L10n had wrong default path to the language file, so the file
load failed
- Fix some default admin includes file for template settings
2019-06-25 17:07:47 +09:00
Clemens Schwaighofer
19458a2eba Escape - in email regex in Basic class 2019-06-14 14:50:46 +09:00
Clemens Schwaighofer
aa9e985120 Fix for CoreLibs/Output/Form/Generate 2019-06-10 13:14:41 +09:00
Clemens Schwaighofer
a0d5e18832 Bug fix for Basic class date/time compare 2019-06-07 16:40:12 +09:00
Clemens Schwaighofer
6c1c528e2e Bug fix in Basic class, add method to basic class, flatpickr add
- Bug in date/time check in Basic class. Time check was invalid
- Add calcDaysInterval to get days between two dates plus weeki days
and weekend days
- Add flatpickr to replace datepickr and move datepickr init function
into separate file (from edit.*.js)
2019-06-07 16:11:28 +09:00
Clemens Schwaighofer
d44325501a Add non => function setups for some calls in case 2019-06-05 14:53:33 +09:00
Clemens Schwaighofer
1b45a1b770 Update core edit.*.js
- all function let are converted to var
- add return to acssel, racssel calls
2019-05-31 18:29:13 +09:00
Clemens Schwaighofer
fe32dd4543 Update database import script, JS dom rel function, typos
the JS dom rel function returns the full element.
The database import script has now test and step by step with retry
import functionality

various comment typo fixe
2019-05-31 13:53:02 +09:00
Clemens Schwaighofer
0111762315 Move the old JS uploader backend libs out from the CoreLibs
They are not CoreLibs and so they moved one level up and were renamed
"FileUpload"
2019-05-28 13:29:34 +09:00
Clemens Schwaighofer
89c2b54889 Some post fixes for edit_base and core libs update
- edit order template indent fix
- Form/Generate init had wrong check on array for load list query
- ACL for group level was still using old session name
2019-05-28 13:22:18 +09:00
Clemens Schwaighofer
70d51025f8 Merge edit_order into edit_base, core libs update
edit_order.php is merged into includes/edit_base and changed to symlink

In the CoreLibs
Output/Form/Generate
- switch all " to ' in strings
- add not set init config_array parts if loaded with no
includes/table_arrays/ file

DB/Extended/ArrayIO
- switch all " to ' in strings

ACL/Login
- swich all missing " strings to '
- not TEMPLATE part is deprecated (but leave load in)
2019-05-28 12:54:17 +09:00
Clemens Schwaighofer
1ecdd5f6d7 Remove all old template control flow 2019-05-28 11:21:04 +09:00
Clemens Schwaighofer
593e8fa7b0 Relocate folders
the old "www/layout/<admin/frontend>/<template name>/..." layout is
deprecated.

new layout:

www/layout/<admin|frontend>/<cache/css/images/javascript>/
The layout/<admin/frontend> is symlinked to www/<admin|frontend>/layout

templates and lang are moved to includes
www/includes/template/<admin/frontend>
www/includes/lang/<admin/frontend>

and no longer symlinked to any public facing folders

The language po files have already been moved to
4dev/lang/<admin|frontend>/
2019-05-28 10:56:53 +09:00
Clemens Schwaighofer
4b08a4d856 Main config.inc update 2019-05-28 09:29:50 +09:00
Clemens Schwaighofer
23d2483855 Update to JS libraries
- update jquery to latest
- update edit.js to prototype and jquery version
- update backend admin inc scripts
- update mein body templates with better logout flow
2019-05-27 11:11:23 +09:00
Clemens Schwaighofer
729541f280 Add missing correct smarty settings in edit order 2019-05-17 16:41:14 +09:00
Clemens Schwaighofer
d47f525480 Javascript updates, bug fix in Form class
- Update JS files and remove some not needed code
- Bug fix in Form where the sub element list was not correctly processed
because the DB insert vars got reset on each loop run
- Add return success/failure variable to the ln10 reload
2019-05-17 15:31:59 +09:00
Clemens Schwaighofer
b5290971c1 Sync template writes tmp files into tmp folder 2019-04-26 11:44:44 +09:00
Clemens Schwaighofer
2f1cb6a0a5 Just very basic FineUploader 2019-04-22 11:16:33 +09:00
Clemens Schwaighofer
d813ce0e35 Updates for composer setup info 2019-04-22 11:10:12 +09:00
Clemens Schwaighofer
22b4fbce8d Upgrade to jQuery 3.4 2019-04-22 10:46:51 +09:00
Clemens Schwaighofer
7fe27b8040 Add missing media folders git ingore files 2019-04-22 10:41:00 +09:00
Clemens Schwaighofer
be03bc96cb Core libs clean up
- end comments from # to //
- clean up not initialzed vars and wrong named vars
2019-04-22 10:28:01 +09:00
Clemens Schwaighofer
4f73a88a8b Remove old config template 2019-04-22 09:53:58 +09:00
Clemens Schwaighofer
b2019226da Update Smarty test, Base class email comment update
- smarty test with optgroup
- ignore file update for log folder
- email regex comment update
2019-04-03 17:45:56 +09:00
Clemens Schwaighofer
754c2edbd2 Add three new methods to the Basic class
- fceil: hack for float numbers that not properly round up
- floorp: roundown(number, precision): eg 48756, -2 => 48700
- initNumeric: set variable to 0 if not numeric
2018-12-19 11:17:20 +09:00
Clemens Schwaighofer
98e16e6143 Some minor updates for test files 2018-12-14 13:07:10 +09:00
Clemens Schwaighofer
005584e2ed Remove old .htaccess php xdebug, test updates, fixes in admin header
- remove all old php_value settings as they wont work with php-fpm
- test check for removeLB
- fix URL for Error handling include in admin header
2018-11-30 11:37:50 +09:00
Clemens Schwaighofer
7e34c5321d Fix libs Login, Basic and DB
- Login ads auto return error for AJAX based calls (so the script
doesn't loop hang)
- Basic gets remove line break call
- DB gets minor updates with arrays set and fixes in old internal method calls
2018-11-28 15:28:27 +09:00
Clemens Schwaighofer
9d918f3b43 Fix admin edit_access wrong enabled type, other fixes
General notice fixes as much as possible
2018-11-07 13:32:58 +09:00
Clemens Schwaighofer
433b21ab6f Fix default edit_* tables and triggers 2018-10-19 10:17:41 +09:00
Clemens Schwaighofer
826b5fdfd6 Move master config to configs folder and create symlink 2018-10-15 09:54:08 +09:00
Clemens Schwaighofer
a923f07fc7 Install basic composer.phar file 2018-10-12 11:02:45 +09:00
Clemens Schwaighofer
736415e939 Master update of include files
First step to clean up all files that are not mandatory for outside
access
* move all header/footer/smarty/set_paths/config files (inc) into
includes/ folder
* generate basic config.php that JUST loads the config.inc file (search)
* config.inc file has sub sections for db access arrays and host
configs, so config.inc is more static
* Also move edit base and template arrays to the include folder
* move the language po files to the 4dev folder as they do not need to
sit outside
* remove not maintained "files.php"

TODO:
split out templates and language files into external layout group
perhaps drop the whole sub template include path thing as this is
actually never really used and more annoying to maintain

eg: layout/frontend/default/ -> layout/frontend
eg: layout/fronend/default/template -> includes/frontend/template

Also check splitting out the NOT define parts of the config.inc file
G_TITLE, EDIT_STYLESHEET, EDIT_JAVASCRIPT, STYLESHEET, JAVASCRIPT
to default define?
2018-10-12 10:42:26 +09:00
Clemens Schwaighofer
2e8712d935 Update set paths bug, Update core JS, fix basic class bug
SITE LANG settings had double ;;

Updated the edit.js core JS parts

Fixed bug in date compare with wrong variable name
2018-10-11 09:51:17 +09:00
Clemens Schwaighofer
c6a15506c5 Fixes for DB IO, DB general functions, JS core updates
DB IO
- Update/Select/Insert checks are sane now and not reverse
- UPDATE can now use RETURNING
- meta table check in postgresql is supressing warning for not existing
table and just returns false

JS (edit)
- update for the html element creation functions

Basic:
- SITE LANG settings added to change default lang based on vhost
- log file id is now set more lienient via globals and not with a global
constant

DB Tables/Functions:
- fix wrong general function and set uid function was missing
2018-09-27 17:06:32 +09:00
Clemens Schwaighofer
b2f5d439d5 Set paths update for correct check for classes + lang reload 2018-08-31 14:05:18 +09:00
Clemens Schwaighofer
071395bfe5 fix for basic edit_* tables data insert 2018-08-03 17:37:00 +09:00
Clemens Schwaighofer
03ff1862c1 Various QQ File uploaders updates 2018-07-26 14:58:44 +09:00
Clemens Schwaighofer
71ab3e27bd Update Prototype to 1.7.3.0, core class array flatten, js update
- Prototype updated to 1.7.3 from 1.7.2
- Basic class has a array flatten with keys as flatten part (keys become
values)
- js update with aelx method
2018-07-20 16:48:25 +09:00
Clemens Schwaighofer
a190148125 AJAX file upload tests update 2018-07-18 18:59:14 +09:00
Clemens Schwaighofer
fa5350baa2 Basic file uploader with AJAX flow
Button based, old style.
2018-07-17 17:27:01 +09:00
Clemens Schwaighofer
4d70f8a017 Allow with as start in queries for select type 2018-07-12 18:36:43 +09:00
Clemens Schwaighofer
d5476b4269 Add edit tables data inserts 2018-07-04 18:58:56 +09:00
Clemens Schwaighofer
bddc196e25 Login password min length, boolean default set if empty
Also remove all inserts from the table declaration and add them in a
separate file instead

Add add/remove css to element for the element js declarations
2018-07-04 18:58:07 +09:00
Clemens Schwaighofer
e3d1679f86 Update DOM prep JS and add html options wrapper function 2018-06-22 18:34:29 +09:00
Clemens Schwaighofer
34f33772d0 Add database internal edit_* tables CUID, CSS loading style
all edit_* have CUID random alphanumeric unique id with 12 characters
length.
automatically created on INSERT and not touched on update.
but can be udpated manually on UPDATE command.
on INSERT cuid is ALWAYS overwritten with auto create

Add CSS loading style sheet
2018-06-22 18:31:02 +09:00
Clemens Schwaighofer
bfe3fdcff4 Enabled & protected add for edit access and protected add to user
Protected flag can be set now for user/access
Enabled flag can be set now for access (but currently not used)
2018-06-15 13:57:19 +09:00
Clemens Schwaighofer
1feb7bf574 Update edit access and edit user
edit access gets enabled + protected flag + updates for edit
edit user table array part gets documentation update
2018-06-15 13:48:48 +09:00
Clemens Schwaighofer
272a5ad202 Login class updates
- fix DB schema edit access with missing uid varchar column
- fix login class " to ' in some parts
- set basic prep area check for password forgot (not password change)
- ACL is only set if permission_okay, just in case some previous checks
skip
- ACL method is private, this should never be called from outside
- update some inline documentation
2018-06-12 18:59:08 +09:00
Clemens Schwaighofer
8a86145307 All DB columns are set to varchar, PHP 7.2 compatible fixes
All DB columns that had a varchar(number) are changed to varchar.
The edit_language default unique grouping has been removed because this
does not work (you cannot have unique on this when it is 1/0 flag only)

Update Output\Form\Generate and edit_base to be PHP 7.2 compatible with
removing all old while (list() ... each()) entries. Fix all undefined
counts, etc.

Login class update is long line wraps and clean up of some nested
teniary parts
2018-06-12 15:32:22 +09:00
1034 changed files with 75272 additions and 11632 deletions

29
.htaccess.old Normal file
View File

@@ -0,0 +1,29 @@
# PHP XDEBUG SETTINGS
# php_value xdebug.profiler_output_dir xdebug/
# php_value xdebug.profiler_output_name timestamp
# php_value xdebug.profiler_enable 1
php_value xdebug.collect_params 2
php_value xdebug.collect_vars 0
php_value xdebug.show_local_vars 0
#php_value xdebug.dump_globals 0
# allowed COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION
#php_value xdebug.dump.GET *
# PHP ERROR SETTINGS
php_flag short_open_tag off
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
# Turn this on to redirect log to different folder
#php_value error_log /var/www/html/developers/clemens/php/php-error/php-errors.log
# this is E_ALL reporting ON
php_value error_reporting -1
# this is E_ALL | ~E_NOTICE
#php_value error_reporting 2039
php_value log_errors_max_len 0

128
.phan/config.php Normal file
View File

@@ -0,0 +1,128 @@
<?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.other.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',
// symlink ignore
'www/lib/smarty-3.1.30/SmartyBC.class.php',
'www/lib/htmlMimeMail-2.5.1/HtmlMimeMailCreate.php',
],
// what not to show as problem
'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' => [],
];

1
.phplint-cache Normal file

File diff suppressed because one or more lines are too long

21
4dev/composer/install.txt Normal file
View File

@@ -0,0 +1,21 @@
Install composer:
curl -sS https://getcomposer.org/installer | /usr/local/php-7.3-httpd-2.4/bin/php
Update composer phar file
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar selfupdate
Install something:
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar require something/something
Update all installed:
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar update
Or update only one package:
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar something/something
Install AWS SDK:
/usr/local/php-7.3-httpd-2.4/bin/php -d memory_limit=-1 composer.phar require aws/aws-sdk-php
Install zipStream:
/usr/local/php-7.3-httpd-2.4/bin/php composer.phar require maennchen/zipstream-php

View File

@@ -1,5 +1,10 @@
# functions
function/update_function.sql
function/set_uid.sql
function/set_generic.sql
function/random_string.sql
function/set_edit_generic.sql
function/edit_set_access_uid.sql
function/edit_log_partition_insert.sql
# generic tables
table/edit_temp_files.sql
table/edit_generic.sql
@@ -14,22 +19,29 @@ 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_log_overflow.sql
table/edit_access.sql
table/edit_access_user.sql
table/edit_access_data.sql
# all triggers (after all tables have been created)
trigger/trg_edit_access_right.sql
trigger/trg_edit_access.sql
trigger/trg_edit_access_data.sql
trigger/trg_edit_access_user.sql
trigger/trg_edit_generic.sql
trigger/trg_edit_group.sql
trigger/trg_edit_language.sql
trigger/trg_edit_log_overflow.sql
trigger/trg_edit_log.sql
trigger/trg_edit_page_access.sql
trigger/trg_edit_page_content.sql
trigger/trg_edit_page.sql
trigger/trg_edit_query_string.sql
trigger/trg_edit_scheme.sql
trigger/trg_edit_user.sql
trigger/trg_edit_visible_group.sql
trigger/trg_edit_menu_group.sql
# insert data
data/edit_tables.sql

View File

@@ -15,22 +15,20 @@ function_name="set_generic";
#sql_path_prep=`echo $sql_path | sed -e "s/\///g"`;
# goes for each file and strips headers and endings, and creates trigger name
for name in $sql_path*;
do
for name in $sql_path*; do
echo "Wokring on $name";
# strip ending
# t_name=`echo $name | sed -e 's/.sql$//g' | sed -e "s/^$sql_path_prep//g" | sed -e 's/\///g'`;
t_name=`echo $name | sed -e 's/^.*\///g' | sed -e 's/.sql$//g'`;
# clean all beginnings
for prefix in $file_prefix;
do
for prefix in $file_prefix; do
prefix=$prefix"_";
t_name=`echo $t_name | sed -e "s/\$prefix//g"`;
done;
# those tables don't need a trigger
# edit_generic
# generic
# those tables don't need a trigger
# edit_generic
# generic
# copy the trigger template to the target
trg_filename=$trigger_path$trigger_prefix"_"$t_name".sql";

View File

@@ -14,17 +14,14 @@ file_prefix="trg";
trigger_prefix="trg";
index_prefix="idx";
for file in `cat ORDER`;
do
if [ -f $file ];
then
for file in `cat ORDER`; do
if [ -f $file ]; then
# write them into a var, so we can re order them in the other way
new_order=$file" "$new_order;
fi;
done;
for file in $new_order;
do
for file in $new_order; do
sqltype=`echo $file | egrep "table/"`;
trgtype=`echo $file | egrep "trigger/"`;
idxtype=`echo $file | egrep "index/"`;
@@ -32,43 +29,34 @@ do
datatype=`echo $file | egrep "data/"`;
# remove all around to get table name
t_file=`echo $file | sed -e 's/^.*\///g' | sed -e 's/.sql$//g'`;
for prefix in $file_prefix;
do
for prefix in $file_prefix; do
prefix=$prefix"_";
t_file=`echo $t_file | sed -e "s/\$prefix//g"`;
done;
# copy the trigger template to the target
for path in $schema;
do
if [ $sqltype ];
then
for path in $schemas; do
if [ $sqltype ]; then
echo "SQL "$path"."$t_file;
echo "DROP TABLE "$path"."$t_file" CASCADE;" | psql -U $user -h $host $db
fi;
if [ $trgtype ];
then
if [ $trgtype ]; then
trigger=$trigger_prefix"_"$t_file;
echo "TRG $trigger TBL "$path".$t_file";
echo "DROP TRIGGER "$path".$trigger ON "$t_file" CASCADE;" | psql -U $user -h $host $db
fi;
if [ $fcttype ];
then
if [ $fcttype ]; then
echo "FCT "$path"."$t_file;
echo "DROP FUNCTION "$path"."$t_file"();" | psql -U $user -h $host $db
fi;
if [ $idxtype ];
then
if [ $idxtype ]; then
index=$index_prefix"_"$t_file;
# echo "IDX "$t_file;
# echo "DROP INDEX $index ON $t_file;" | psql -U $user -h $host $db
# echo "IDX "$t_file;
# echo "DROP INDEX $index ON $t_file;" | psql -U $user -h $host $db
fi;
if [ $datatype ];
then
if [ $datatype ]; then
echo "DATA "$t_file;
# echo "DROP FUNCTION "$t_file"();" | psql -U $user -h $host $db
# echo "DROP FUNCTION "$t_file"();" | psql -U $user -h $host $db
fi;
# psql -U cms_user -h 192.168.12.14 -f $file CMSv2
done;
done;

View File

@@ -5,19 +5,63 @@
#echo "EXIT";
#exit;
# if flagged 'y' then it will ask after each import to continue
development='y';
test='n';
input='';
# database connection info
db='<db name>';
host='<db host>';
user='<db user>';
#schema="publicv";
schema="public";
export PGPASSWORD='';
for file in `cat ORDER`;
do
if [ -f $file ];
then
# for path in $schema;
# do
# echo "WORK ON "$schema"."$file;
psql -U $user -h $host -f $file $db 1>> output 2>> error
# done;
# log files
error_file="log/error";
output_file="log/output";
if [ ! -f ORDER ]; then
echo "Could not find ORDER file";
exit;
fi;
if [ "$test" != "n" ]; then
echo "TESTING MODE, NO DATA WILL BE IMPORTED";
fi;
if [ "$development" = "y" ]; then
echo "STEP BY STEP IMPORT MODE ACTIVATED";
fi;
while read file <&3; do
if [ "$file" = "FINISHED" ]; then
echo "Database data is flagged as FINISHED in ORDER file";
exit;
fi;
done;
if [ -f "$file" ]; then
for path in "$schemas"; do
echo "[+] WORK ON '${file}' @ '${path}'";
if [ "$test" = 'n' ]; then
echo "=== START [$file] ===>" >> ${error_file};
psql -U ${user} -h ${host} -f "${file}" ${db} 1>> ${output_file} 2>> ${error_file}
echo "=== END [$file] ===>" >> ${error_file};
fi;
if [ "$development" = "y" ]; then
echo "Press 'y' to move to next. Press 'r' to reload last file. ^c to abort";
fi;
while [ "$development" = "y" ] && [ "$input" != "y" ]; do
read -ep "Continue (y|r|^c): " input;
if [ "$input" = "r" ]; then
echo "Reload File '${file}' ...";
if [ "$test" = 'n' ]; then
echo "=== START RELOAD [$file] ===>" >> ${error_file};
psql -U ${user} -h ${host} -f "${file}" ${db} 1>> ${output_file} 2>> ${error_file}
echo "=== END RELOAD [$file] ===>" >> ${error_file};
fi;
fi;
done;
input='';
done;
elif [[ ${file::1} != "#" ]]; then
echo "[!] COULD NOT FIND FILE: '${file}'";
fi;
done 3<ORDER;

View File

@@ -0,0 +1,148 @@
-- edit tables insert data in order
-- edit visible group
DELETE FROM edit_visible_group;
INSERT INTO edit_visible_group (name, flag) VALUES ('Main Menu', 'main');
INSERT INTO edit_visible_group (name, flag) VALUES ('Data popup Menu', 'datapopup');
-- edit menu group
DELETE FROM edit_menu_group;
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Menu', 'admin', 1);
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Data Popup Menu', 'AdminDataPopup', 2);
-- edit page
DELETE FROM edit_page;
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_pages.php', 'Edit Pages', 1, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_users.php', 'Edit Users', 2, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_languages.php', 'Edit Languages', 3, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_schemes.php', 'Edit Schemes', 4, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_groups.php', 'Edit Groups', 5, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_visible_group.php', 'Edit Visible Groups', 6, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_menu_group.php', 'Edit Menu Groups', 7, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_access.php', 'Edit Access', 8, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_order.php', 'Edit Order', 9, 1, 0);
-- edit visible group
DELETE FROM edit_page_visible_group;
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
-- INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main'));
-- edit page menu group
DELETE FROM edit_page_menu_group;
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
-- INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin'));
-- edit access right
DELETE FROM edit_access_right;
INSERT INTO edit_access_right (name, level, type) VALUES ('Default', -1, 'default');
INSERT INTO edit_access_right (name, level, type) VALUES ('No Access', 0, 'none');
INSERT INTO edit_access_right (name, level, type) VALUES ('List', 10, 'list');
INSERT INTO edit_access_right (name, level, type) VALUES ('Read', 20, 'read');
INSERT INTO edit_access_right (name, level, type) VALUES ('Translator', 30, 'mod_trans');
INSERT INTO edit_access_right (name, level, type) VALUES ('Modify', 40, 'mod');
INSERT INTO edit_access_right (name, level, type) VALUES ('Create/Write', 60, 'write');
INSERT INTO edit_access_right (name, level, type) VALUES ('Delete', 80, 'del');
INSERT INTO edit_access_right (name, level, type) VALUES ('Site Admin', 90, 'siteadmin');
INSERT INTO edit_access_right (name, level, type) VALUES ('Admin', 100, 'admin');
-- edit scheme
DELETE FROM edit_scheme;
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Default Scheme', 'E0E2FF', 1);
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Admin', 'CC7E7E', 1);
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Visitor', 'B0C4B3', 1);
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('User', '1E789E', 1);
-- edit language
DELETE FROM edit_language;
INSERT INTO edit_language (short_name, long_name, iso_name, order_number, enabled, lang_default) VALUES ('en', 'English', 'UTF-8', 1, 1, 1);
INSERT INTO edit_language (short_name, long_name, iso_name, order_number, enabled, lang_default) VALUES ('ja', 'Japanese', 'UTF-8', 2, 1, 0);
-- edit group
DELETE FROM edit_group;
INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('Admin', 1, (SELECT edit_scheme_id FROM edit_scheme WHERE name = 'Admin'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin'));
INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('User', 1, (SELECT edit_scheme_id FROM edit_scheme WHERE name = 'User'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'write'));
-- edit page access
DELETE FROM edit_page_access;
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1,
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
-- edit user
-- inserts admin user so basic users can be created
DELETE FROM edit_user;
INSERT INTO edit_user (username, password, enabled, debug, db_debug, email, protected, admin, edit_language_id, edit_group_id, edit_scheme_id, edit_access_right_id) VALUES ('admin', 'admin', 1, 1, 1, '', 1, 1,
(SELECT edit_language_id FROM edit_language WHERE short_name = 'en'),
(SELECT edit_group_id FROM edit_group WHERE name = 'Admin'),
(SELECT edit_scheme_id FROM edit_scheme WHERE name = 'Admin'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);
-- edit access
DELETE FROM edit_access;
INSERT INTO edit_access (name, enabled, protected) VALUES ('Admin Access', 1, 1);
-- edit access user
DELETE FROM edit_access_user;
INSERT INTO edit_access_user (edit_default, enabled, edit_access_id, edit_user_id, edit_access_right_id) VALUES (1, 1,
(SELECT edit_access_id FROM edit_access WHERE uid = 'AdminAccess'),
(SELECT edit_user_id FROM edit_user WHERE username = 'admin'),
(SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')
);

View File

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

View File

@@ -1,6 +1,6 @@
-- add uid add for edit_access table
CREATE OR REPLACE FUNCTION set_edit_access_uid() RETURNS TRIGGER AS
CREATE OR REPLACE FUNCTION set_edit_access_uid() RETURNS TRIGGER AS
$$
DECLARE
myrec RECORD;

View File

@@ -0,0 +1,28 @@
-- add uid add for edit_group table
CREATE OR REPLACE FUNCTION set_edit_group_uid() RETURNS TRIGGER AS
$$
DECLARE
myrec RECORD;
v_uid VARCHAR;
BEGIN
-- skip if NEW.name is not set
IF NEW.name IS NOT NULL AND NEW.name <> '' THEN
-- use NEW.name as base, remove all spaces
-- name data is already unique, so we do not need to worry about this here
v_uid := REPLACE(NEW.name, ' ', '');
IF TG_OP = 'INSERT' THEN
-- always set
NEW.uid := v_uid;
ELSIF TG_OP = 'UPDATE' THEN
-- check if not set, then set
SELECT INTO myrec t.* FROM edit_group t WHERE edit_group_id = NEW.edit_group_id;
IF FOUND THEN
NEW.uid := v_uid;
END IF;
END IF;
END IF;
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';

View File

@@ -0,0 +1,18 @@
-- 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; -- LEAKPROOF;

View File

@@ -0,0 +1,15 @@
-- 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';

View File

@@ -0,0 +1,12 @@
-- adds the created or updated date tags
CREATE OR REPLACE FUNCTION set_uid() RETURNS TRIGGER AS '
DECLARE
random_length INT = 32; -- that should be long enough
BEGIN
IF TG_OP = ''INSERT'' THEN
NEW.uid := random_string(random_length);
END IF;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';

View File

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

2
4dev/database/log/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*
!.gitignore

View File

@@ -8,10 +8,12 @@
-- DROP TABLE edit_access;
CREATE TABLE edit_access (
edit_access_id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE,
enabled SMALLINT NOT NULL DEFAULT 0,
protected SMALLINT DEFAULT 0,
deleted SMALLINT DEFAULT 0,
uid VARCHAR,
name VARCHAR UNIQUE,
description VARCHAR,
COLOR VARCHAR
color VARCHAR,
additional_acl JSONB
) INHERITS (edit_generic) WITHOUT OIDS;
DELETE FROM edit_access;
INSERT INTO edit_access (name) VALUES ('Admin Access');

View File

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

View File

@@ -14,14 +14,3 @@ CREATE TABLE edit_access_right (
type VARCHAR,
UNIQUE (level,type)
) INHERITS (edit_generic) WITHOUT OIDS;
DELETE FROM edit_access_right;
INSERT INTO edit_access_right (name, level, type) VALUES ('Default', -1, 'default');
INSERT INTO edit_access_right (name, level, type) VALUES ('No Access', 0, 'none');
INSERT INTO edit_access_right (name, level, type) VALUES ('Read', 20, 'read');
INSERT INTO edit_access_right (name, level, type) VALUES ('Translator', 30, 'mod_trans');
INSERT INTO edit_access_right (name, level, type) VALUES ('Modify', 40, 'mod');
INSERT INTO edit_access_right (name, level, type) VALUES ('Create/Write', 60, 'write');
INSERT INTO edit_access_right (name, level, type) VALUES ('Delete', 80, 'del');
INSERT INTO edit_access_right (name, level, type) VALUES ('Site Admin', 90, 'siteadmin');
INSERT INTO edit_access_right (name, level, type) VALUES ('Admin', 100, 'admin');

View File

@@ -8,15 +8,12 @@
-- DROP TABLE edit_access_user;
CREATE TABLE edit_access_user (
edit_access_user_id SERIAL PRIMARY KEY,
edit_default SMALLINT DEFAULT 0,
edit_access_id INT NOT NULL,
edit_user_id INT NOT NULL,
edit_access_right_id INT NOT NULL,
enabled SMALLINT NOT NULL DEFAULT 0,
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_user_id INT NOT NULL,
FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
edit_access_right_id INT NOT NULL,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_default SMALLINT DEFAULT 0,
enabled SMALLINT NOT NULL DEFAULT 0
) INHERITS (edit_generic) WITHOUT OIDS;
DELETE FROM edit_access_user;
INSERT INTO edit_access_user (edit_default, edit_access_id, edit_user_id, edit_access_right_id) VALUES (1, 1, 1, 8);

View File

@@ -7,7 +7,7 @@
-- DROP TABLE edit_generic;
CREATE TABLE edit_generic (
eg_status INT,
cuid VARCHAR,
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
date_updated TIMESTAMP WITHOUT TIME ZONE
);

View File

@@ -8,12 +8,13 @@
-- DROP TABLE edit_group;
CREATE TABLE edit_group (
edit_group_id SERIAL PRIMARY KEY,
name VARCHAR(50),
enabled SMALLINT NOT NULL DEFAULT 0,
edit_scheme_id INT,
edit_access_right_id INT NOT NULL,
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
edit_access_right_id INT NOT NULL,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
enabled SMALLINT NOT NULL DEFAULT 0,
deleted SMALLINT DEFAULT 0,
uid VARCHAR,
name VARCHAR,
additional_acl JSONB
) INHERITS (edit_generic) WITHOUT OIDS;
INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('Admin', 1, 2, 8);

View File

@@ -9,12 +9,10 @@
-- DROP TABLE edit_language;
CREATE TABLE edit_language (
edit_language_id SERIAL PRIMARY KEY,
short_name VARCHAR(2),
long_name VARCHAR(70),
iso_name VARCHAR(12),
order_number INT,
enabled SMALLINT NOT NULL DEFAULT 0,
lang_default SMALLINT NOT NULL DEFAULT 0 UNIQUE
lang_default SMALLINT NOT NULL DEFAULT 0,
long_name VARCHAR,
short_name VARCHAR,
iso_name VARCHAR,
order_number INT
) INHERITS (edit_generic) WITHOUT OIDS;
INSERT INTO edit_language (short_name, long_name, iso_name, order_number, enabled, lang_default) VALUES ('en', 'English', 'UTF-8', 1, 1, 1);

View File

@@ -8,6 +8,8 @@
-- DROP TABLE edit_log;
CREATE TABLE edit_log (
edit_log_id SERIAL PRIMARY KEY,
euid INT, -- this is a foreign key, but I don't nedd to reference to it
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
username VARCHAR,
password VARCHAR,
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
@@ -26,7 +28,6 @@ CREATE TABLE edit_log (
action_value VARCHAR,
action_type VARCHAR,
action_error VARCHAR,
euid INT, -- this is a foreign key, but I don't nedd to reference to it
user_agent VARCHAR,
referer VARCHAR,
script_name VARCHAR,
@@ -36,6 +37,5 @@ CREATE TABLE edit_log (
http_accept VARCHAR,
http_accept_charset VARCHAR,
http_accept_encoding VARCHAR,
session_id VARCHAR,
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE
session_id VARCHAR
) INHERITS (edit_generic) WITHOUT OIDS;

View File

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

View File

@@ -8,11 +8,9 @@
-- DROP TABLE edit_menu_group;
CREATE TABLE edit_menu_group (
edit_menu_group_id SERIAL PRIMARY KEY,
name VARCHAR(255),
flag VARCHAR(50),
name VARCHAR,
flag VARCHAR,
order_number INT NOT NULL
) INHERITS (edit_generic) WITHOUT OIDS;
DELETE FROM edit_menu_group;
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Menu', 'admin', 1);
INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Data Popup Menu', 'AdminDataPopup', 2);

View File

@@ -2,29 +2,21 @@
-- DATE: 2005/07/05
-- DESCRIPTION:
-- edit tables, this table contains all pages in the edit interface and allocates rights + values to it
-- TABLE: edit_table
-- TABLE: edit_page
-- HISTORY:
-- DROP TABLE edit_page;
CREATE TABLE edit_page (
edit_page_id SERIAL PRIMARY KEY,
filename VARCHAR(70),
name VARCHAR(255) UNIQUE,
content_alias_edit_page_id INT, -- alias for page content, if the page content is defined on a different page, ege for ajax backend pages
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
filename VARCHAR,
name VARCHAR UNIQUE,
order_number INT NOT NULL,
online SMALLINT NOT NULL DEFAULT 0,
menu SMALLINT NOT NULL DEFAULT 0,
popup SMALLINT NOT NULL DEFAULT 0,
popup_x SMALLINT,
popup_y SMALLINT
popup_y SMALLINT,
hostname VARCHAR
) INHERITS (edit_generic) WITHOUT OIDS;
DELETE FROM edit_page;
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_pages.php', 'Edit Pages', 1, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_users.php', 'Edit Users', 2, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_languages.php', 'Edit Languages', 3, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_schemes.php', 'Edit Schemes', 4, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_groups.php', 'Edit Groups', 5, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_visible_group.php', 'Edit Visible Groups', 6, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_menu_group.php', 'Edit Menu Groups', 7, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_access.php', 'Edit Access', 8, 1, 1);
INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_order.php', 'Edit Order', 9, 1, 0);

View File

@@ -8,21 +8,13 @@
-- DROP TABLE edit_page_access;
CREATE TABLE edit_page_access (
edit_page_access_id SERIAL PRIMARY KEY,
enabled SMALLINT NOT NULL DEFAULT 0,
edit_group_id INT NOT NULL,
edit_page_id INT NOT NULL,
edit_access_right_id INT NOT NULL,
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_page_id INT NOT NULL,
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
edit_access_right_id INT NOT NULL,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
enabled SMALLINT NOT NULL DEFAULT 0
) INHERITS (edit_generic) WITHOUT OIDS;
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 1, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 2, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 3, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 4, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 5, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 6, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 7, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 8, 8);
INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, 1, 9, 8);

View File

@@ -0,0 +1,20 @@
-- AUTHOR: Clemens Schwaighofer
-- DATE: 2019/9/9
-- DESCRIPTION:
-- sub content to one page with additional edit access right set
-- can be eg JS content groups on one page
-- TABLE: edit_page_content
-- HISTORY:
-- DROP TABLE edit_page_content;
CREATE TABLE edit_page_content (
edit_page_content_id SERIAL PRIMARY KEY,
edit_page_id INT NOT NULL,
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_access_right_id INT NOT NULL,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
uid VARCHAR UNIQUE,
name VARCHAR,
order_number INT NOT NULL,
online SMALLINT NOT NULL DEFAULT 0
) INHERITS (edit_generic) WITHOUT OIDS;

View File

@@ -8,16 +8,7 @@
-- DROP TABLE edit_page_menu_group;
CREATE TABLE edit_page_menu_group (
edit_page_id INT NOT NULL,
edit_menu_group_id INT NOT NULL,
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_menu_group_id INT NOT NULL,
FOREIGN KEY (edit_menu_group_id) REFERENCES edit_menu_group (edit_menu_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
DELETE FROM edit_page_menu_group;
INSERT INTO edit_page_menu_group VALUES (1, 1);
INSERT INTO edit_page_menu_group VALUES (2, 1);
INSERT INTO edit_page_menu_group VALUES (3, 1);
INSERT INTO edit_page_menu_group VALUES (4, 1);
INSERT INTO edit_page_menu_group VALUES (5, 1);
INSERT INTO edit_page_menu_group VALUES (6, 1);
INSERT INTO edit_page_menu_group VALUES (7, 1);

View File

@@ -8,16 +8,7 @@
-- DROP TABLE edit_page_visible_group;
CREATE TABLE edit_page_visible_group (
edit_page_id INT NOT NULL,
edit_visible_group_id INT NOT NULL,
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_visible_group_id INT NOT NULL,
FOREIGN KEY (edit_visible_group_id) REFERENCES edit_visible_group (edit_visible_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
DELETE FROM edit_page_visible_group;
INSERT INTO edit_page_visible_group VALUES (1, 1);
INSERT INTO edit_page_visible_group VALUES (2, 1);
INSERT INTO edit_page_visible_group VALUES (3, 1);
INSERT INTO edit_page_visible_group VALUES (4, 1);
INSERT INTO edit_page_visible_group VALUES (5, 1);
INSERT INTO edit_page_visible_group VALUES (6, 1);
INSERT INTO edit_page_visible_group VALUES (7, 1);

View File

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

View File

@@ -9,12 +9,8 @@
CREATE TABLE edit_scheme (
edit_scheme_id SERIAL PRIMARY KEY,
enabled SMALLINT NOT NULL DEFAULT 0,
name VARCHAR(50),
header_color VARCHAR(7),
css_file VARCHAR(50),
template VARCHAR(50)
name VARCHAR,
header_color VARCHAR,
css_file VARCHAR,
template VARCHAR
) INHERITS (edit_generic) WITHOUT OIDS;
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Default Scheme', '#E0E2FF', 1);
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Admin', '#CC7E7E', 1);
INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Visitor', '#B0C4B3', 1);

View File

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

View File

@@ -8,31 +8,41 @@
-- DROP TABLE edit_user;
CREATE TABLE edit_user (
edit_user_id SERIAL PRIMARY KEY,
connect_edit_user_id INT, -- possible reference to other user
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_language_id INT NOT NULL,
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_group_id INT NOT NULL,
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_scheme_id INT,
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
edit_access_right_id INT NOT NULL,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
enabled SMALLINT NOT NULL DEFAULT 0,
deleted SMALLINT NOT NULL DEFAULT 0,
username VARCHAR UNIQUE,
password VARCHAR,
enabled SMALLINT NOT NULL DEFAULT 0,
first_name VARCHAR,
last_name VARCHAR,
first_name_furigana VARCHAR,
last_name_furigana VARCHAR,
debug SMALLINT NOT NULL DEFAULT 0,
db_debug SMALLINT NOT NULL DEFAULT 0,
email VARCHAR,
protected SMALLINT NOT NULL DEFAULT 0,
admin SMALLINT NOT NULL DEFAULT 0,
edit_language_id INT NOT NULL,
edit_group_id INT NOT NULL,
edit_scheme_id INT,
edit_access_right_id INT NOT NULL,
login_error_count INT,
login_error_date_last TIMESTAMP WTIHOUT TIME ZONE,
login_error_date_first TIMESTAMP WTIHOUT TIME ZONE,
last_login TIMESTAMP WITHOUT TIME ZONE,
login_error_count INT DEFAULT 0,
login_error_date_last TIMESTAMP WITHOUT TIME ZONE,
login_error_date_first TIMESTAMP WITHOUT TIME ZONE,
strict SMALLINT DEFAULT 0,
locked SMALLINT DEFAULT 0,
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
password_reset_time TIMESTAMP WITHOUT TIME ZONE, -- when the password reset was requested
password_reset_uid VARCHAR, -- the uid to access the password reset page
additional_acl JSONB -- additional ACL as JSON string (can be set by other pages)
) INHERITS (edit_generic) WITHOUT OIDS;
-- inserts admin user so basic users can be created
DELETE FROM edit_user;
INSERT INTO edit_user (username, password, enabled, debug, db_debug, email, protected, admin, edit_language_id, edit_group_id, edit_scheme_id, edit_access_right_id) VALUES ('admin', 'admin', 1, 1, 1, '', 1, 1, 1, 1, 2, 8);
COMMENT ON COLUMN edit_user.password_reset_time IS 'When the password reset was requested. For reset page uid valid check';
COMMENT ON COLUMN edit_user.password_reset_uid IS 'Password reset page uid';

View File

@@ -8,10 +8,6 @@
-- DROP TABLE edit_visible_group;
CREATE TABLE edit_visible_group (
edit_visible_group_id SERIAL PRIMARY KEY,
name VARCHAR(255),
flag VARCHAR(50)
name VARCHAR,
flag VARCHAR
) INHERITS (edit_generic) WITHOUT OIDS;
DELETE FROM edit_visible_group;
INSERT INTO edit_visible_group (name, flag) VALUES ('Main Menu', 'main');
INSERT INTO edit_visible_group (name, flag) VALUES ('Data popup Menu', 'datapopup');

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,4 @@
DROP TRIGGER IF EXISTS 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();

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +0,0 @@
-- DROP TRIGGER trg_set_edit_access_uid ON edit_access;
CREATE TRIGGER trg_set_edit_access_uid
BEFORE INSERT OR UPDATE ON edit_access
FOR EACH ROW EXECUTE PROCEDURE set_edit_access_uid();

View File

@@ -0,0 +1,14 @@
-- update missing edit_* table data
ALTER TABLE edit_generic ADD cuid VARCHAR;
ALTER TABLE edit_access ADD enabled SMALLINT DEFAULT 0;
ALTER TABLE edit_access ADD protected SMALLINT DEFAULT 0;
ALTER TABLE edit_group ADD uid VARCHAR;
ALTER TABLE edit_group ADD deleted SMALLINT DEFAULT 0;
ALTER TABLE temp_files ADD folder VARCHAR;
ALTER TABLE edit_page ADD hostname VARCHAR;
ALTER TABLE edit_user ADD deleted SMALLINT DEFAULT 0;

View File

@@ -0,0 +1,17 @@
-- 2019/9/10 UPDATE missing cuid in edit_* tables
UPDATE edit_access SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_access_data SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_access_right SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_access_user SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_group SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_language SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_log SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_menu_group SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_page SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_page_access SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_page_content SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_query_string SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_scheme SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_user SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_visible_group SET cuid = random_string(12) WHERE cuid IS NULL;

View File

@@ -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"

View File

@@ -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 "「クラス」これは翻訳です?"

View File

@@ -7,8 +7,8 @@ LOCAL_BASE_DIR="<local folder>";
LOCAL_DIR=$LOCAL_BASE_DIR"";
REMOTE_WEB="<remote folder>";
TARGET_HOST_WEB="<user>@<host>";
TMP_DIR=$LOCAL_BASE_DIR"/4dev/";
tmpf_web=$TMP_DIR"tmp.web";
TMP_DIR=$LOCAL_BASE_DIR"/4dev/tmp/";
tmpf_web=$TMP_DIR"sync.exclude.tmp";
# for web (ika)
rm -f $tmpf_web;

View File

@@ -0,0 +1,92 @@
-- 2019/9/10 update edit_page with reference and additional ACLs, update core functions
-- * random_string function
-- * add cuid column in edit_generic
-- * update generic trigger function
-- * edit_page_content table/trigger
-- * edit_* additional_acl entries
-- * edit_page content alias link
-- * update any missing cuid entries
-- create random string with length X
CREATE FUNCTION random_string(randomLength int)
RETURNS text AS $$
SELECT array_to_string(
ARRAY(
SELECT substring(
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
trunc(random() * 62)::int + 1,
1
)
FROM generate_series(1, randomLength) AS gs(x)
),
''
)
$$ LANGUAGE SQL
RETURNS NULL ON NULL INPUT
VOLATILE;
-- edit_gneric update
ALTER TABLE edit_generic ADD cuid VARCHAR;
-- adds the created or updated date tags
CREATE OR REPLACE FUNCTION set_edit_generic() RETURNS TRIGGER AS '
DECLARE
random_length INT = 12; -- that should be long enough
BEGIN
IF TG_OP = ''INSERT'' THEN
NEW.date_created := ''now'';
NEW.cuid := random_string(random_length);
ELSIF TG_OP = ''UPDATE'' THEN
NEW.date_updated := ''now'';
END IF;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
-- DROP TABLE edit_page_content;
CREATE TABLE edit_page_content (
edit_page_content_id SERIAL PRIMARY KEY,
edit_page_id INT NOT NULL,
edit_access_right_id INT NOT NULL,
name VARCHAR,
uid VARCHAR UNIQUE,
order_number INT NOT NULL,
online SMALLINT NOT NULL DEFAULT 0,
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
) INHERITS (edit_generic) WITHOUT OIDS;
DROP TRIGGER trg_edit_page_content ON edit_page_content;
CREATE TRIGGER trg_edit_page_content
BEFORE INSERT OR UPDATE ON edit_page_content
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
-- INSERT new list entry
INSERT INTO edit_access_right (name, level, type) VALUES ('List', 10, 'list');
-- UPDATE
ALTER TABLE edit_user ADD additional_acl JSONB;
ALTER TABLE edit_group ADD additional_acl JSONB;
ALTER TABLE edit_access ADD additional_acl JSONB;
-- page content reference settings
ALTER TABLE edit_page ADD content_alias_edit_page_id INT;
ALTER TABLE edit_page ADD CONSTRAINT edit_page_content_alias_edit_page_id_fkey FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE;
-- 2019/9/10 UPDATE missing cuid in edit_* tables
UPDATE edit_access SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_access_data SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_access_right SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_access_user SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_group SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_language SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_log SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_menu_group SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_page SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_page_access SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_page_content SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_query_string SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_scheme SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_user SET cuid = random_string(12) WHERE cuid IS NULL;
UPDATE edit_visible_group SET cuid = random_string(12) WHERE cuid IS NULL;
-- update all triggers

498
bin/Progress.pm Normal file
View File

@@ -0,0 +1,498 @@
package Progress;
# AUTHOR: Clemens Schwaighofer
# DATE CREATED: 2009/6/16
# DESCRIPTION: progress percent class
# METHODS
# * init
# my $prg = Progress->new();
# will init a new progress class in the var $prg
# the following parameters can be set directly during a new call
# - verbose (1/0)
# - precision (-1~10)
# - wide_time (0/1)
# - microtime (0/1)
# setting is done via
# my $prg = Progress->new(verbose => 1, microtime = 1);
# * setting methods
# verbose($level int)
# $level has to be int, if not set there is no output show, at least 1 has to be given to see visible output
# precision($decimals int)
# $decimals has to be int, if set to -1 then the steps are done in 10 increase, else it sets how many decimals are visible, 0 for no decimals
# wide_time(0/1 int)
# sets the flag for wide time, if set to 1 the estimated time to end and time run is left prefixed with 15 chars
# microtime(0/1 int)
# sets the flag to always show microtime (1) or only if the previous time was the same (0)
# reset()
# resets all the internal vars for another new run
# SetStartTime(optional timestamp)
# sets the start times for this progress run, the overall start/end time is set, and the time used for the actual progress
# in case there is some processing done before the run starts, it is highly recommended to call SetETAStartTime before the actual processing starts
# if no timestamp is given, internal timestamp is used (this is recommended)
# SetETAStartTime(optional timestamp)
# only sets the start/end time for the actual "estimated time" calculation. It is recommended to call this right before the processing loop starts
# eg if there is a big query running that takes a lot of time, this method should be called before the reading loop
# as with SetStartTime a timestamp can be given, if not then the internal timestamp is used (this is recommended)
# SetEndTime(optional timestamp)
# sets the end time for the overall processing. This should be called at the very end of the script before any final stat data is printed
# linecount($lines int)
# sets the maximum lines that will be processed, used for percentage calculation. If non int is given, will set to 1. This will be only set once, to
# reset used reset() method.
# Either this or filesize NEED to be set
# filesize($bytes int)
# filesize in bytes, if non valid data is given, then it is set to 1.
# filesize() and linecount() can both be set, but at least one of them has to be set.
# if filesize is set a byte data output is added, if only linecount is given, only the linecount output will be given (no bytes per second, etc)
# ShowPosition(optional current byte position int)
# this is the main processing and has to be called at the end of the loop where the data is processed. If no bytes are given the internal counter (linecount)
# is used.
# for bytes it is recommended to use IO::File and $FH->tell to pass on the bytes
#
# VARIABLES
# * internal set
# change: flagged 1 if output is given or would be given. can be used for any post processing after the ShowPosition is called
# precision_ten_step: flagged 1 if the precision was set to -1
# start: overall start time
# end: overall end time
# count: count of processed lines
# [TODO: describe the others too, at the moment only below in %fields]
use strict;
use warnings;
use utf8;
BEGIN {
use POSIX;
use Carp;
use Time::HiRes qw(time);
use File::Basename;
use Number::Format qw(format_number);
use vars qw($AUTOLOAD);
push(@INC, File::Basename::dirname($0).'/');
}
# important includes
use functions;
# variable declarationf or access
# * can be set
# = only for read
# unmarked are internal only, but can be read if they are needed in further processing in the script
my %fields = (
linecount => 0, # * max lines in input
filesize => 0, # * max file size
precision => 1, # * comma after percent
wide_time => 0, # * if flagged 1, then the wide 15 char left bound format is used
verbose => 0, # * verbose status from outside
microtime => 0, # * microtime output for last run time (1 for enable, 0 for auto, -1 for disable)
change => 0, # = flag if output was given
start => undef, # = global start for the full script running time
start_run => undef, # = for the eta time, can be set after a query or long read in, to not create a wrong ETA time
start_time => undef, # loop start
end => undef, # = global end
end_time => undef, # loop end
count_size => undef, # = filesize current
count => 0, # = position current
current_count => 0, # last count (position)
lines_processed => 0, # lines processed in the last run
last_group => 0, # time in seconds for the last group run (until percent change)
lines_in_last_group => 0, # float value, lines processed per second to the last group run
lines_in_global => 0, # float values, lines processed per second to complete run
bytes_in_last_group => 0, # flaot value, bytes processes per second in the last group run
bytes_in_global => 0, # float value, bytes processed per second to complete run
size_in_last_group => 0, # bytes processed in last run (in bytes)
current_size => 0, # current file position (size)
last_percent => 0, # last percent position
precision_ten_step => 0, # if we have normal % or in steps of 10
percent_print => 5, # the default size, this is precision + 4
percent_precision => 1, # this is 1 if it is 1 or 0 for precision, or precision size
eta => undef, # estimated time to finish
full_time_needed => undef, # run time since start
lg_microtime => 0 # last group microtime, this is auto set during process.
);
# class init
sub new
{
my $proto = shift;
my $class = ref($proto) || $proto;
my %data = @_;
my $self = {
_permitted => \%fields,
%fields,
};
# vars to init
bless ($self, $class);
if ($data{'verbose'} && $data{'verbose'} =~ /^\d{1}$/) {
$self->{verbose} = $data{'verbose'};
}
if (exists($data{'precision'}) && (($data{'precision'} || $data{'precision'} == 0) && $data{'precision'} =~ /^\-?\d{1,2}$/)) {
$self->precision($data{'precision'});
}
if ($data{'microtime'} && $data{'microtime'} =~ /^(0|1)$/) {
$self->microtime($data{'microtime'});
}
if ($data{'wide_time'} && $data{'wide_time'} =~ /^(0|1)$/) {
$self->wide_time($data{'wide_time'});
}
return $self;
}
# auto load for vars
sub AUTOLOAD
{
my $self = shift;
my $type = ref($self) || croak "$self is not an object";
my $name = $AUTOLOAD;
$name =~ s/.*://;
unless (exists $self->{_permitted}->{$name}) {
croak "Can't access '$name' field in class $type";
}
if (@_) {
return $self->{$name} = shift;
} else {
return $self->{$name};
}
}
# destructor
sub DESTROY
{
# do nothing, there is nothing to close or finish
}
# SUB: reset
# PARAMS: none
# DESC: resets all the current counters only and current start times
sub reset
{
my $self = shift;
# reset what always gets reset
$self->{count} = 0;
$self->{count_size} = undef;
$self->{current_count} = 0;
$self->{linecount} = 0;
$self->{lines_processed} = 0;
$self->{last_group} = 0;
$self->{lines_in_last_group} = 0;
$self->{lines_in_global} = 0;
$self->{bytes_in_last_group} = 0;
$self->{bytes_in_global} = 0;
$self->{size_in_last_group} = 0;
$self->{filesize} = 0;
$self->{current_size} = 0;
$self->{last_percent} = 0;
$self->{eta} = 0;
$self->{full_time_needed} = 0;
$self->{start_run} = undef;
$self->{start_time} = undef;
$self->{end_time} = undef;
}
# SUB: microtime
# PARAMS: 1/0
# DESC: flag to set microtime on or off in the time output
# if not 1 or 0, set to 0
sub microtime
{
my $self = shift;
my $microtime;
if (@_) {
$microtime = shift;
if ($microtime == 1 || $microtime == 0) {
$self->{microtime} = $microtime;
} else {
$self->{microtime} = 0;
}
}
return $self->{microtime};
}
# SUB: wide_time
# PARAMS: 1/0
# DESC: flag to set wide_time (15 char spacer).
# if not 1 or 0, set to 0
sub wide_time
{
my $self = shift;
my $wide;
if (@_) {
$wide = shift;
if ($wide == 1 || $wide == 0) {
$self->{wide_time} = $wide;
} else {
$self->{wide_time} = 0;
}
}
return $self->{wide_time};
}
# SUB: precision
# PARAMS: precision in int
# DESC: sets the output percent precision calculation and printf width
# if negative, to ten step, if bigger 10, set to one
sub precision
{
my $self = shift;
my $comma;
if (@_) {
$comma = shift;
$comma = 0 if ($comma !~ /^\-?\d{1,}$/);
if ($comma < 0) {
# -2 is 5 step
# -1 is 10 step
if ($comma < -1) {
$self->{precision_ten_step} = 5;
} else {
$self->{precision_ten_step} = 10;
}
$self->{precision} = 0; # no comma
$self->{percent_precision} = 0; # no print precision
$self->{percent_print} = 3; # max 3 length
} else {
$self->{precision} = $comma < 0 || $comma > 10 ? 10 : $comma;
$self->{percent_precision} = $comma < 0 || $comma > 10 ? 10 : $comma;
$self->{percent_print} = ($comma == 0 ? 3 : 4) + $self->{percent_precision};
}
}
return $self->{precision};
}
# SUB: linecount
# PARAMS: max number of lines to be processed
# DESC: sets the max number for lines for the percent calculation, if negative or not number, set to 1
# can only be set ONCE
sub linecount
{
my $self = shift;
my $linecount;
if (!$self->{linecount}) {
if (@_) {
$linecount = shift;
$self->{linecount} = $linecount;
$self->{linecount} = 1 if ($linecount < 0 || $linecount !~ /\d+/)
}
}
return $self->{linecount};
}
# SUB: filesize
# PARAMS: max filesize for the to processed data
# DESC: sets the max filesize for the to processed data, if negative or not number, set to 1
# input data has to be in bytes without any suffix (no b, kb, etc)
# can only be set ONCE
sub filesize
{
my $self = shift;
my $filesize;
if (!$self->{filesize}) {
if (@_) {
$filesize = shift;
$self->{filesize} = $filesize;
$self->{filesize} = 1 if ($filesize < 0 || $filesize !~ /\d+/)
}
}
return $self->{filesize};
}
# SUB: SetStartTime
# PARAMS: time, or nothing
# DESC: sets all the start times
sub SetStartTime
{
my $self = shift;
if (@_) {
$self->{start} = shift;
} else {
$self->{start} = time();
}
$self->{start_time} = $self->{start};
$self->{start_run} = $self->{start};
}
# SUB: SetETAStartTime
# PARAMS: time, or nothing
# DESC: sets the loop & run time, for correct ETA callculation
sub SetETAStartTime
{
my $self = shift;
if (@_) {
$self->{start_time} = shift;
} else {
$self->{start_time} = time();
}
$self->{start_run} = $self->{start_time};
}
# SUB: SetEndTime
# PARAMS: time, or nothing
# DESC: sets the end time for running time calculation
sub SetEndTime
{
my $self = shift;
if (@_) {
$self->{end} = shift;
} else {
$self->{end} = time();
}
}
# SUB: ShowPosition
# PARAMS: optiona; file position (via file pointer)
# RETURN: string for percent position output
# DESC: calculates the current percent position based on the passed parameter, if no parameter uses intneral counter
sub ShowPosition
{
my $self = shift;
# set local vars
my $percent; # current percent
my $full_time_needed; # complete process time
my $full_time_per_line; # time per line
my $eta; # estimated end time
my $string = ''; # percent string that gets output
my $show_filesize = 1;
# microtime flags
my $eta_microtime = 0;
my $ftn_microtime = 0;
my $lg_microtime = 0;
# percent precision calc
my $_p_spf = "%.".$self->{precision}."f";
# output format for percent
my $_pr_p_spf = "%".$self->{percent_print}.".".$self->{percent_precision}."f";
# set the linecount precision based on the final linecount, if not, leave it empty
my $_pr_lc = "%s";
$_pr_lc = "%".length(format_number($self->{linecount}))."s" if ($self->{linecount});
# time format, if flag is set, the wide format is used
my $_pr_tf = "%s";
$_pr_tf = "%-15s" if ($self->{'wide_time'});
# do the smae for file size
# my $_pr_fs = "%s";
# $_pr_fs = "%".length(function::convert_number($self->{filesize}))."s" if ($self->{filesize});
# increase position by one
$self->{count} ++;
# see if we get anything from IO tell
if (@_) {
$self->{file_pos} = shift;
} else {
# we did not, so we set internal value
$self->{file_pos} = $self->{count};
# we also check if the filesize was set now
if (!$self->{filesize}) {
$self->{filesize} = $self->{linecount};
}
# set ignore filesize output (no data)
$show_filesize = 0;
}
# set the count size based on the file pos, is only used if we have filesize
$self->{count_size} = $self->{file_pos};
# do normal or down to 10 (0, 10, ...) %
if ($self->{precision_ten_step}) {
# calc 0 comma precision, so just do a floor
my $_percent = sprintf("%d", ($self->{file_pos} / $self->{filesize}) * 100);
# mod that to 10
my $mod = $_percent % $self->{precision_ten_step};
# either write this one, or write the previous, old one
$percent = $mod == 0 ? $_percent : $self->last_percent;
# print "P: $percent, Last: ".$self->last_percent.", Mod: ".$mod.", Calc: ".$_percent."\n";
} else {
$percent = sprintf($_p_spf, ($self->{file_pos} / $self->{filesize}) * 100);
}
# print "POS: ".$self->{file_pos}.", PERCENT: $percent / ".$self->last_percent."\n";
if ($percent != $self->last_percent) {
$self->{end_time} = time();
# for from the beginning
$full_time_needed = $self->{end_time} - $self->{start_run}; # how long from the start;
$self->{last_group} = $self->{end_time} - $self->{start_time};
$self->{lines_processed} = $self->{count} - $self->{current_count};
# lines in last group
$self->{lines_in_last_group} = $self->{'last_group'} ? ($self->{lines_processed} / $self->{last_group}) : 0;
# lines in global
$self->{lines_in_global} = $full_time_needed ? ($self->{'count'} / $full_time_needed) : 0;
# if we have linecount
if (!$self->{linecount}) {
$full_time_per_line = (($full_time_needed) ? $full_time_needed : 1) / $self->{count_size}; # how long for all
$eta = $full_time_per_line * ($self->{filesize} - $self->{count_size}); # estimate for the rest
} else {
$full_time_per_line = (($full_time_needed) ? $full_time_needed : 1) / $self->{count}; # how long for all
$eta = $full_time_per_line * ($self->{linecount} - $self->{count}); # estimate for the rest
}
# just in case ...
$eta = '0' if ($eta < 0);
# check if to show microtime
# ON: if microtime is flagged as one
$eta_microtime = $ftn_microtime = $lg_microtime = 1 if ($self->{microtime} == 1);
# AUTO: foir microtime
if ($self->{microtime} == 0) {
$eta_microtime = 1 if ($eta > 0 && $eta < 1);
$ftn_microtime = 1 if ($full_time_needed > 0 && $full_time_needed < 1);
# pre check last group: if pre comma part is same add microtime anyway
$lg_microtime = 1 if ($self->{last_group} > 0 && $self->{last_group} < 1);
}
# print out
if ($show_filesize) {
# last group size
$self->{size_in_last_group} = $self->{count_size} - $self->{current_size};
# calc kb/s if there is any filesize data
# last group
$self->{bytes_in_last_group} = $self->{'last_group'} ? ($self->{size_in_last_group} / $self->{last_group}) : 0;
# global
$self->{bytes_in_global} = $full_time_needed ? ($self->{count_size} / $full_time_needed) : 0;
# only used if we run with file size for the next check
$self->{current_size} = $self->{count_size};
$string = sprintf(
"Processed ".$_pr_p_spf."%% [%s / %s] | ".$_pr_lc." / ".$_pr_lc." Lines | ETA: ".$_pr_tf." / TR: ".$_pr_tf." / LR: %s lines (%s) in %s, %s (%s) lines/s, %s (%s) b/s\n",
$percent,
function::convert_number($self->{count_size}),
function::convert_number($self->{filesize}),
format_number($self->{count}),
format_number($self->{linecount}),
function::convert_time($eta, $eta_microtime),
function::convert_time($full_time_needed, $ftn_microtime),
format_number($self->{lines_processed}),
function::convert_number($self->{size_in_last_group}),
function::convert_time($self->{last_group}, $lg_microtime),
format_number($self->{lines_in_global}, 2, 1),
format_number($self->{lines_in_last_group}, 2, 1),
function::convert_number($self->{bytes_in_global}),
function::convert_number($self->{bytes_in_last_group})
) if ($self->{verbose} >= 1);
} else {
$string = sprintf(
"Processed ".$_pr_p_spf."%% | ".$_pr_lc." / ".$_pr_lc." Lines | ETA: ".$_pr_tf." / TR: ".$_pr_tf." / LR: %s lines in %s, %s (%s) lines/s\n",
$percent,
format_number($self->{count}),
format_number($self->{linecount}),
function::convert_time($eta, $eta_microtime),
function::convert_time($full_time_needed, $ftn_microtime),
format_number($self->{lines_processed}),
function::convert_time($self->{last_group}, $lg_microtime),
format_number($self->{lines_in_global}, 2, 1),
format_number($self->{lines_in_last_group}, 2, 1)
) if ($self->{verbose} >= 1);
}
# write back vars
$self->{last_percent} = $percent;
$self->{eta} = $eta;
$self->{full_time_needed} = $full_time_needed;
$self->{lg_microtime} = $lg_microtime;
# for the next run, check data
$self->{start_time} = time();
$self->{current_count} = $self->{count};
# trigger if this is a change
$self->{change} = 1;
} else {
# trigger if this is a change
$self->{change} = 0;
}
return $string;
}
1;

501
bin/functions.pm Normal file
View File

@@ -0,0 +1,501 @@
package function;
# AUTHOR: Clemens Schwaighofer
# DATE CREATED: 2004/11/09
# DESCRIPTION: functions collection for Adidas scripts
# HISTORY:
# 2005/06/22 (cs) added header key check function
# 2005/02/10 (cs) added debug flag to print output, added two new functions to format a number into B, KB, etc
# 2005/01/13 (cs) fixed array problem with the clean up and int function
use strict;
use warnings;
use 5.000_000;
use POSIX qw(floor);
use File::Copy;
use Digest::SHA qw(sha1_hex);
use utf8;
#require Exporter;
#our @ISA = qw(Exporter);
#our @EXPORT = qw();
# depending on the options given to the program, it gets the correct settings
# to which db it should connect
sub get_db_user
{
my ($target, $db) = @_;
# the parts of the hash array (tab seperated)
my @array_names = qw{db_name db_port db_user db_pass db_host db_type db_test db_ssl};
my %db_out = ();
# based on the two parameters find the correct vars
# each level can hold data, higher level data overrules lower data
# eg $config::db{'test'}{'db_user'} overrules $config::db{'db_user'}
for (my $i = 1; $i <= 3; $i ++) {
foreach my $name (@array_names) {
# depending on the level check the level of data
if ($i == 1) {
$db_out{$name} = $config::db{$name} if (defined($config::db{$name}));
} elsif ($i == 2) {
$db_out{$name} = $config::db{$target}{$name} if (defined($config::db{$target}{$name}));
} elsif ($i == 3) {
$db_out{$name} = $config::db{$target}{$db}{$name} if (defined($config::db{$target}{$db}{$name}));
}
} # for each db data var
} # for each data level in the hash
return (
$db_out{'db_name'},
$db_out{'db_port'},
$db_out{'db_user'},
$db_out{'db_pass'},
$db_out{'db_host'},
$db_out{'db_type'},
$db_out{'db_test'},
$db_out{'db_ssl'}
);
}
# get the DSN string for the DB connect
sub get_db_dsn
{
my (
$db_name,
$db_port,
$db_user,
$db_pass,
$db_host,
$db_type,
$db_ssl
) = @_;
my $dsn = '';
if ($db_type eq 'mysql' && $db_name && $db_host && $db_user) {
$dsn = "DBI:mysql:database=".$db_name.";host=".$db_host.";port=".$db_port;
} elsif ($db_type eq 'pgsql' && $db_name && $db_host && $db_user) {
$dsn = "DBI:Pg:dbname=".$db_name.";host=".$db_host.";port=".$db_port.";sslmode=".$db_ssl;
} else {
# invalid db type
$dsn = -1;
}
return $dsn;
}
sub strip_white_spaces
{
my ($element) = @_;
# get rid of spaces at the end and at the beginning of each bloack
$element =~ s/^\s+//g;
$element =~ s/\s+$//g;
return $element;
}
sub prepare_hash_keys
{
my($csv, $data, $csv_header) = @_;
# unset value starts at 1000 and goes up ...
my $unset_value = 1000;
my %keys = ();
# parse header
if ($csv->parse($data)) {
my @cols = $csv->fields();
for (my $i = 0; $i < @cols; $i ++) {
# remove all spaces before and afterward
$cols[$i] = function::strip_white_spaces($cols[$i]);
# write key - id number
$keys{$cols[$i]} = $i;
print $::DEBUG "\tPostion [".$i."]: ".$cols[$i]."\n" if ($::debug);
print "\tPosition [".$i."]: ".$cols[$i]."\n" if ($::verbose > 1);
}
} else {
die "ERROR[".$csv->error_diag()."]: ".$csv->error_input()."\n";
}
# add empty values
foreach my $csv_header_value (@$csv_header) {
if (!defined($keys{$csv_header_value})) {
$keys{$csv_header_value} = $unset_value;
$unset_value ++;
print $::DEBUG "\tKey [$csv_header_value] gets position [".$keys{$csv_header_value}."]\n" if ($::debug);
print "\tKey [$csv_header_value] gets position [".$keys{$csv_header_value}."]\n" if ($::verbose > 1);
}
}
return %keys;
}
sub error_check_keys
{
my($csv_header, $keys) = @_;
if ((keys %$keys) != @$csv_header) {
print $::ERR "TOTAL WRONG COUNT: CSV header ".(keys %$keys)." vs Needed headers ".@$csv_header.": perhaps your input file is not fitting this?\n";
print "TOTAL WRONG COUNT: CSV header ".(keys %$keys)." vs Needed headers ".@$csv_header.": perhaps your input file is not fitting this?\n";
# if there are more keys in CSV file, then in the header defined in here
if ((keys %$keys) > @$csv_header) {
print $::ERR "Listing Perl Header missing\n";
print "Listing Perl Header missing\n";
foreach my $key (keys %$keys) {
print $::ERR "Missing in perl Header list: $key\n" if (!grep {$_ eq $key} @$csv_header);
print "Missing in perl Header list: $key\n" if (!grep {$_ eq $key} @$csv_header);
}
# if more keys are in the header defined than in the csv file
} else {
print $::ERR "Listing CSV Header missing\n";
print "Listing CSV Header missing\n";
for (my $i = 0; $i < @$csv_header; $i ++) {
print $::ERR "Missing in CSV file: ".$$csv_header[$i]."\n" if (!defined($$keys{$$csv_header[$i]}));
print "Missing in CSV file: ".$$csv_header[$i]."\n" if (!defined($$keys{$$csv_header[$i]}));
}
}
return 0;
}
return 1;
}
sub clean_up_row
{
my ($row) = @_;
for (my $i = 0; $i < @$row; $i++) {
# get rid of spaces at the end and at the beginning of each bloack
$$row[$i] =~ s/^\s+//g;
$$row[$i] =~ s/\s+$//g;
# convert all half width Katakan to Full width Katakana
$$row[$i] = Unicode::Japanese->new($$row[$i])->h2zKana->get;
# need to decode the converted string, somehow Unicode::Japanese does not return proper utf8 if use utf8 is on
utf8::decode($$row[$i]);
}
return @$row;
}
sub set_int_fields
{
my ($row, $keys, $int_fields) = @_;
# check ALL smallint/int/etc rows to be set to a number
for (my $i = 0; $i < @$int_fields; $i++) {
print "\t\tCheck ".$$int_fields[$i]." {".$$keys{$$int_fields[$i]}."} ... " if ($::verbose > 1);
if (!$$row[$$keys{$$int_fields[$i]}]) {
$$row[$$keys{$$int_fields[$i]}] = 0;
}
# if its filled, but not a digit, set to 1
if ($$row[$$keys{$$int_fields[$i]}] =~ /\D/) {
$$row[$$keys{$$int_fields[$i]}] = 1;
}
print "[".$$row[$$keys{$$int_fields[$i]}]."] [DONE]\n" if ($::verbose > 1);
}
return @$row;
}
# formats a number with dots and ,
sub format_number
{
my ($number) = @_;
# dummy, does nothing now
# should put . or , every 3 digits later
return $number;
}
# converts bytes to human readable format
sub convert_number
{
my ($number) = @_;
my $pos; # the original position in the labels array
# divied number until its division would be < 1024. count that position for label usage
for ($pos = 0; $number > 1024; $pos ++) {
$number = $number / 1024;
}
# before we return it, we format it [rounded to 2 digits, if has decimals, else just int]
# we add the right label to it and return
return sprintf(!$pos ? '%d' : '%.2f', $number)." ".qw(B KB MB GB TB PB EB)[$pos];
}
# make time from seconds string
sub convert_time
{
my ($timestamp, $show_micro) = @_;
my $ms = '';
# cut of the ms, but first round them up to four
$timestamp = sprintf("%.4f", $timestamp);
# print "T: ".$timestamp."\n";
($timestamp, $ms) = split(/\./, $timestamp);
my @timegroups = ("86400", "3600", "60", "1");
my @output = ();
for (my $i = 0; $i < @timegroups; $i ++) {
push(@output, floor($timestamp / $timegroups[$i]));
$timestamp = $timestamp % $timegroups[$i];
}
# output has days|hours|min|sec
return (($output[0]) ? $output[0]."d " : "").
(($output[1] || $output[0]) ? $output[1]."h " : "").
(($output[2] ||$output[1] || $output[0]) ? $output[2]."m " : "").
$output[3]."s".
(($show_micro) ? " ".((!$ms) ? 0 : $ms)."ms" : "");
}
# get a timestamp and create a proper formated date/time field
sub create_time
{
my ($timestamp, $show_micro) = @_;
my $ms = '';
$timestamp = 0 if (!$timestamp);
# round ms to 4 numbers
$timestamp = sprintf("%.4f", $timestamp);
($timestamp, $ms) = split(/\./, $timestamp);
# array for time
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime($timestamp);
# year, month fix
$year += 1900;
$month += 1;
# string for return
return $year."-".
($month < 10 ? '0'.$month : $month)."-".
($day < 10 ? '0'.$day : $day)." ".
($hour < 10 ? '0'.$hour : $hour).":".
($min < 10 ? '0'.$min : $min).":".
($sec < 10 ? '0'.$sec : $sec).
(($ms && $show_micro) ? ".".$ms : "");
}
# create YYYYMMDD data
sub create_date
{
my ($timestamp, $split_string) = @_;
my $split = $split_string ? $split_string : '';
$timestamp = time() if (!$timestamp);
# array for time
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime($timestamp);
# year, month fix
$year += 1900;
$month += 1;
# string for return
return $year.$split.
($month < 10 ? '0'.$month : $month).$split.
($day < 10 ? '0'.$day : $day);
}
# create YYYYMMDD_HHMMSS data
sub create_datetime
{
my ($timestamp, $split_string) = @_;
my $split = $split_string ? $split_string : '';
$timestamp = time() if (!$timestamp);
# array for time
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime($timestamp);
# year, month fix
$year += 1900;
$month += 1;
# string for return
return $year.$split.
($month < 10 ? '0'.$month : $month).$split.
($day < 10 ? '0'.$day : $day).'_'.
($hour < 10 ? '0'.$hour : $hour).$split.
($min < 10 ? '0'.$min : $min).$split.
($sec < 10 ? '0'.$sec : $sec);
}
sub left_fill
{
my($number, $size, $char) = @_;
return sprintf($char x ($size - length($number)).$number);
}
# wrapper to flip the crc32 hex string, so it is like buggy php one (php <= 5.2.6)
sub crc32b_fix
{
my ($crc) = @_;
# left pad with 0 to 8 chars
$crc = ('0' x (8 - length($crc))).$crc;
# flip two chars (byte hex)
$crc =~ s/^([a-z0-9]{2})([a-z0-9]{2})([a-z0-9]{2})([a-z0-9]{2})$/$4$3$2$1/;
return $crc;
}
# short sha1 (9 char) function
sub sha1_short
{
my ($string) = @_;
return substr(sha1_hex($string), 0, 9);
}
# DEBUG helpers for dumping data
# from: http://www.perlmonks.org/?node_id=390153
# alternative use Dump::Dumper and print Dump(VAR);
sub dump_data
{
my ($level, $base, $data) = @_;
my $nextlevel = $level + 1;
if (ref($data) eq 'ARRAY') {
foreach my $k (0 .. $#{$data}) {
my $baseval = $base.'['.$k.']';
dump_it($nextlevel, $baseval, $data->[$k]);
}
} elsif (ref($data) eq 'HASH') {
foreach my $k (sort(keys(%{$data}))) {
my $baseval = $base.'{'.$k.'}';
dump_it($nextlevel, $baseval, $data->{$k});
}
} elsif (ref($data) eq 'SCALAR') {
my $baseval = $base;
dump_it($nextlevel, $baseval, ${$data});
}
}
sub dump_it
{
my ($nextlevel, $baseval, $datum) = @_;
my $reftype = ref($datum);
if ($reftype eq 'HASH') {
dump_data($nextlevel, $baseval, \%{$datum});
} elsif ($reftype eq 'ARRAY') {
dump_data($nextlevel, $baseval, \@{$datum});
} else {
process_data($nextlevel, $baseval, $datum);
}
}
sub process_data
{
my ($nextlevel, $baseval, $datum) = @_;
my $indentation = ' ' x $nextlevel;
print $indentation, $baseval, ' = ', $datum, "\n";
}
# METHOD: lock_run
# PARAMS: file (plus path) to lock to
# the current running pid (if not given will be set in script)
# the current name of the script (auto set if not given)
# optional write encoding (set to utf8 if not given)
# RETURN: nothing
# DESC: checks if this script is already running based on the lock file, if if yes will abort
# if file is there but pid not find it automatically cleans up the stale lock file
sub lock_run
{
my ($file, $run_pid, $name, $encoding) = @_;
# if no encoding, set utf8
$encoding = 'utf8' if (!$encoding);
# set the run pid if no pid is given
$run_pid = $$ if (!$run_pid);
# set the script base name
$name = File::Basename::fileparse($0) if (!$name);
# if lock file exists
if (-f $file) {
my $exists = 0;
my $pid = `cat $file`;
chomp($pid);
# printDebug("Lock file found for $pid", 1);
# check if process excists with this pid
# better todo A for ALL processes
# ps axu OR short ps a
open(PS, 'ps axu|') || die("$!");
while (<PS>) {
# search for pid and run file name
if ($_ =~ /\ $pid\ / && $_ =~ /$name/) {
$exists = 1;
}
last if ($exists);
}
close(PS);
if (!$exists) {
# printDebug("Lock file cleaned up for $pid", 1);
unlink($file);
} else {
die("Script is already running with PID $pid\n");
}
}
# write current PID into lock file
open(FP, '>:encoding('.$encoding.')', $file) || die ("Cannot open run lock file '$file' for writing\n");
print FP $run_pid;
close(FP);
}
# METHOD: printDebug
# PARAMS: message, verbose level
# RETURN: nothing
# DESC: depeding on the verbose and debug settings it will print out message and or write it to a debug file
sub printDebug
{
my($msg, $vrb, $dbg) = @_;
# print debug only if debug is on and debug file is available
print $::DEBUG '['.create_time(time(), 1).'] '.$msg."\n" if ($::debug && $::DEBUG);
# print to log if log is accessable and the verbose flag matches, or for debug flag if debug statement is set and not log only, or if log only, if not debug statement
print $::LOG $msg."\n" if (($::verbose >= $vrb || (!$::log_only && $dbg && $::debug) || ($::log_only && !$dbg)) && $::LOG);
# print to screen if verbose matches, but it is not a log only, or if it is debug statement and debug flag is set
print $msg."\n" if (($::verbose >= $vrb && !$::log_only) || ($dbg && $::debug));
}
# METHOD: waitAbort
# PARAMS: time in seconds, if not provided set to 5
# RETURN: nothing
# DESC: simple prints out a char while waiting for an abort command
sub waitAbort
{
my($sleep) = @_;
$sleep = 5 if ($sleep !~ /\d/);
print "Waiting $sleep seconds (Press CTRL + C to abort)\n";
for (my $i = 1; $i <= $sleep; $i ++) {
print ".";
sleep 1;
}
print "\n\n";
}
# METHOD: copyToTemporary
# PARAMS: file to copy, and target file name
# RETURN: the target file name
# DESC : sets the source to read only and makes a copy, the copy is also set to read only
sub copyToTemporary
{
my ($source, $target) = @_;
# get the current rights
my $current_chmod = (stat $source)[2];
# set source file ARGV to read only
# we skip that, the source might be NOT from the same user as the script read, just copy the file and set the target read only
chmod(0444, $source);
# create tmp backup file from which we read, data gets removed at the end of an run, or during an abort call
copy($source, $target) || die("Copy failed: $!\n");
# set read rights to r only for the copied file
chmod(0444, $target);
# set old access rights for ARGV file
chmod($current_chmod, $source);
# return target file name
return $target;
}
# METHOD: uniq
# PARAMS: @array
# RETURN: array with only unique entries
# DESC : used in uniq(@array) to get only unique data back
sub uniq
{
my %seen;
grep !$seen{$_}++, @_;
}
# METHOD: clean_test
# PARAMS: array of data
# RETURN: cleaned up array of data
# DESC : sets all undefs to '' for debug output
sub clean_test
{
my (@data) = @_;
# map check for defined, if not, return ''
return map { defined($_) ? $_ : '' } @data;
}
# METHOD: clean_test_string
# PARAMS: string to be checked
# RETURN: data or empty for output
# DESC : sets all input data to '' if it is undefined
sub clean_test_string
{
my ($data) = @_;
return defined($data) ? $data : '';
}
1;

6
phpstan-bootstrap.php Executable file
View 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__

60
phpstan.neon Normal file
View File

@@ -0,0 +1,60 @@
# PHP Stan Config
parameters:
tmpDir: /tmp/phpstan-corelibs
level: 1
paths:
- %currentWorkingDirectory%/www
bootstrapFiles:
- %currentWorkingDirectory%/phpstan-bootstrap.php
scanDirectories:
- www/lib/Smarty
scanFiles:
- www/configs/config.php
- www/configs/config.master.php
- www/lib/autoloader.php
- www/vendor/autoload.php
- www/lib/Smarty/Autoloader.php
- www/lib/CoreLibs/Template/SmartyExtend.php
excludes_analyse:
# no check admin
- www/admin/qq_file_upload_front.php
- 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 the smartyextend
- www/lib/CoreLibs/Template/SmartyExtend.php
# ignore errores with
# ignoreErrors:
#- 'error regex'
#-
# message: 'error regex'
# path: %currentWorkingDirectory%/www/some/*
# paths:
# - ...
# - ...

9
static_checkers.txt Normal file
View 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/

View File

@@ -1,3 +1,4 @@
php_value xdebug.profiler_output_dir /home/developer/html/adidas/20081208_catalogue/4dev/xdebug/
php_value xdebug.profiler_output_name timestamp
php_value xdebug.profiler_enable 0
# all .inc files are denied access from outside
<Files "*.inc">
Require all denied
</Files>

View File

@@ -1,4 +1,7 @@
<?php
<?php declare(strict_types=1);
/**
* @phan-file-suppress PhanTypeSuspiciousStringExpression
*/
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
$DEBUG_ALL = 1;
@@ -14,26 +17,41 @@ ob_start();
// basic class test file
define('USE_DATABASE', true);
// sample config
require("config.inc");
require 'config.php';
// set session name
if (!defined('SET_SESSION_NAME')) {
DEFINE('SET_SESSION_NAME', EDIT_SESSION_NAME);
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
}
// define log file id
DEFINE('LOG_FILE_ID', 'classTest');
// set language for l10n
$lang = 'en_utf8';
$LOG_FILE_ID = 'classTest';
// init login & backend class
$login = new CoreLibs\ACL\Login($DB_CONFIG[LOGIN_DB], $lang);
$basic = new CoreLibs\Admin\Backend($DB_CONFIG[MAIN_DB], $lang);
$basic->dbInfo(1);
$login = new CoreLibs\ACL\Login(DB_CONFIG);
$basic = new CoreLibs\Admin\Backend(DB_CONFIG);
$basic->dbInfo(true);
ob_end_flush();
echo "DB_CONFIG_SET constant: <pre>".print_r(DB_CONFIG, true)."</pre><br>";
$basic->hrRunningTime();
$basic->runningTime();
echo "RANDOM KEY [50]: ".$basic->randomKeyGen(50)."<br>";
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
echo "TIMED [def]: ".$basic->runningTime()."<br>";
echo "TIMED [string]: ".$basic->runningtime_string."<br>";
$basic->hrRunningTime();
echo "RANDOM KEY [default]: ".$basic->randomKeyGen()."<br>";
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
// color
print "COLOR: -1, -1, -1: ".$basic->rgb2hex(-1, -1, -1)."<br>";
print "COLOR: 10, 20, 30: ".$basic->rgb2hex(10, 20, 30)."<br>";
// set + check edit access id
$edit_access_id = 3;
if (array_key_exists('unit', $login->acl)) {
print "ACL UNIT: ".print_r(array_keys($login->acl['unit']), 1)."<br>";
print "ACCESS CHECK: ".$login->loginCheckEditAccess($edit_access_id)."<br>";
if (is_object($login) && isset($login->acl['unit'])) {
print "ACL UNIT: ".print_r(array_keys($login->acl['unit']), true)."<br>";
print "ACCESS CHECK: ".(string)$login->loginCheckEditAccess($edit_access_id)."<br>";
if ($login->loginCheckEditAccess($edit_access_id)) {
$basic->edit_access_id = $edit_access_id;
} else {
@@ -67,58 +85,111 @@ print "CALLER BACKTRACE: ".$basic->getCallerMethod()."<br>";
$basic->debug('SOME MARK', 'Some error output');
print "EDIT ACCESS ID: ".$basic->edit_access_id."<br>";
// 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>";
// print "DEFAULT ACL: <br>".$basic->print_ar($login->default_acl_list)."<br>";
// $result = array_flip(array_filter(array_flip($login->default_acl_list), function ($key) { if (is_numeric($key)) return $key; }));
// print "DEFAULT ACL: <br>".$basic->print_ar($result)."<br>";
// DEPRICATED CALL
// $basic->adbSetACL($login->acl);
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>";
// print "DEFAULT ACL: <br>".$basic->print_ar($login->default_acl_list)."<br>";
// $result = array_flip(array_filter(array_flip($login->default_acl_list), function ($key) { if (is_numeric($key)) return $key; }));
// print "DEFAULT ACL: <br>".$basic->print_ar($result)."<br>";
// DEPRICATED CALL
// $basic->adbSetACL($login->acl);
}
// 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>";
}
print "<pre>";
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO TEST ".time()."') RETURNING test");
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
print "DIRECT INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), 1)."<br>";
print "DIRECT INSERT STATUS: $status | "
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
// should throw deprecated error
// $basic->getReturningExt();
print "DIRECT INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->dbGetInsertPK()), true)."<br>";
$basic->dbPrepare("ins_foo", "INSERT INTO foo (test) VALUES ($1)");
$status = $basic->dbExecute("ins_foo", array('BAR TEST '.time()));
print "PREPARE INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
print "PREPARE INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), 1)."<br>";
print "PREPARE INSERT STATUS: $status | "
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
."RETURNING RETURN: ".print_r($basic->dbGetReturningArray(), true)."<br>";
print "PREPARE INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->dbGetInsertPK()), true)."<br>";
// returning test with multiple entries
// $status = $basic->db_exec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id");
$status = $basic->dbExec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id, test");
print "DIRECT MULTIPLE INSERT STATUS: $status | PRIMARY KEYS: ".print_r($basic->insert_id, 1)." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
print "DIRECT MULTIPLE INSERT STATUS: $status | "
."PRIMARY KEYS: ".print_r($basic->dbGetInsertPK(), true)." | "
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
// no returning, but not needed ;
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO; TEST ".time()."');");
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
print "DIRECT INSERT STATUS: $status | "
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
// UPDATE WITH RETURNING
$status = $basic->dbExec("UPDATE foo SET test = 'SOMETHING DIFFERENT' WHERE foo_id = 3688452 RETURNING test");
print "UPDATE STATUS: $status | "
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
print "</pre>";
// REEAD PREPARE
if ($basic->dbPrepare('sel_foo', "SELECT foo_id, test, some_bool, string_a, number_a, number_a_numeric, some_time FROM foo ORDER BY foo_id DESC LIMIT 5") === false) {
print "Error in sel_foo prepare<br>";
} else {
$max_rows = 6;
// do not run this in dbFetchArray directly as
// dbFetchArray(dbExecute(...))
// this will end in an endless loop
$cursor = $basic->dbExecute('sel_foo', []);
$i = 1;
while (($res = $basic->dbFetchArray($cursor, true)) !== false) {
print "DB PREP EXEC FETCH ARR: ".$i.": <pre>".print_r($res, true)."</pre><br>";
$i ++;
}
}
# db write class test
$table = 'foo';
print "TABLE META DATA: ".$basic->printAr($basic->dbShowTableMetaData($table))."<br>";
$primary_key = ''; # unset
$db_write_table = array ('test', 'string_a', 'number_a', 'some_bool');
// $db_write_table = array ('test');
$object_fields_not_touch = array ();
$object_fields_not_update = array ();
$data = array ('test' => 'BOOL TEST SOMETHING '.time(), 'string_a' => 'SOME TEXT', 'number_a' => 5);
$db_write_table = array('test', 'string_a', 'number_a', 'some_bool');
// $db_write_table = array('test');
$object_fields_not_touch = array();
$object_fields_not_update = array();
$data = array('test' => 'BOOL TEST SOMETHING '.time(), 'string_a' => 'SOME TEXT', 'number_a' => 5);
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
$data = array ('test' => 'BOOL TEST ON '.time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1);
$data = array('test' => 'BOOL TEST ON '.time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1);
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
$data = array ('test' => 'BOOL TEST OFF '.time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0);
$data = array('test' => 'BOOL TEST OFF '.time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0);
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
$data = array ('test' => 'BOOL TEST UNSET '.time());
$data = array('test' => 'BOOL TEST UNSET '.time());
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
// return Array Test
$query = "SELECT type, sdate, integer FROM foobar";
$data = $basic->dbReturnArray($query, true);
print "Full foobar list: <br><pre>".print_r($data, true)."</pre><br>";
# async test queries
/* $basic->dbExecAsync("SELECT test FROM foo, (SELECT pg_sleep(10)) as sub WHERE foo_id IN (27, 50, 67, 44, 10)");
echo "WAITING FOR ASYNC: ";
@@ -150,7 +221,7 @@ while (($ret = $basic->dbCheckAsync()) === true)
flush();
}
print "<br>END STATUS: ".$ret." | PK: ".$basic->insert_id."<br>";
print "ASYNC PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), 1)."<br>"; */
print "ASYNC PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>"; */
$to_db_version = '9.1.9';
print "VERSION DB: ".$basic->dbVersion()."<br>";
@@ -161,14 +232,14 @@ print "DB Version bigger than $to_db_version: ".$basic->dbCompareVersion('>='.$t
print "DB Version bigger $to_db_version: ".$basic->dbCompareVersion('>'.$to_db_version)."<br>";
/* $q = "SELECT FOO FRO BAR";
// $q = "Select * from foo";
// $q = "Select * from foo";
$foo = $basic->dbExecAsync($q);
print "[ERR] Query: ".$q."<br>";
print "[ERR] RESOURCE: $foo<br>";
while (($ret = $basic->dbCheckAsync()) === true)
{
print "[ERR]: $ret<br>";
// sleep(5);
sleep(5);
} */
// search path check
@@ -181,6 +252,16 @@ print "RETURN DATA FOR search_path: ".$data."<br>";
$status = $basic->dbExec("INSERT INTO test.schema_test (contents, id) VALUES ('TIME: ".time()."', ".rand(1, 10).")");
print "OTHER SCHEMA INSERT STATUS: ".$status." | PK NAME: ".$basic->pk_name.", PRIMARY KEY: ".$basic->insert_id."<br>";
print "<b>NULL TEST DB READ</b><br>";
$q = "SELECT uid, null_varchar, null_int FROM test_null_data WHERE uid = 'A'";
$res = $basic->dbReturnRow($q);
var_dump($res);
print "RES: ".$basic->printAr($res)."<br>";
print "ISSET: ".isset($res['null_varchar'])."<br>";
print "EMPTY: ".empty($res['null_varchar'])."<br>";
// data read test
// time string thest
$timestamp = 5887998.33445;
$time_string = $basic->timeStringFormat($timestamp);
@@ -192,6 +273,13 @@ if (round($timestamp, 4) == $basic->stringToTime($time_string)) {
} else {
print "REVERSE TRIME STRING DO NOT MATCH<br>";
}
print "ZERO TIME STRING: ".$basic->timeStringFormat(0, true)."<br>";
print "ZERO TIME STRING: ".$basic->timeStringFormat(0.0, true)."<br>";
print "ZERO TIME STRING: ".$basic->timeStringFormat(1.005, true)."<br>";
echo "HTML ENT INT: ".$basic->htmlent(5)."<br>";
echo "HTML ENT STRING: ".$basic->htmlent('5<<>')."<br>";
echo "HTML ENT NULL: ".$basic->htmlent(null)."<br>";
// magic links test
print $basic->magicLinks('user@bubu.at').'<br>';
@@ -202,8 +290,110 @@ $date_1 = '2017/1/5';
$date_2 = '2017-01-05';
print "COMPARE DATE: ".$basic->compareDate($date_1, $date_2)."<br>";
// recursive array search
$test_array = array(
'foo' => 'bar',
'input' => array(
'element_a' => array(
'type' => 'text'
),
'element_b' => array(
'type' => 'email'
),
'element_c' => array(
'type' => 'email'
)
)
);
echo "SOURCE ARRAY: ".$basic->printAr($test_array)."<br>";
echo "FOUND ELEMENTS [base]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array, 'type'))."<br>";
echo "FOUND ELEMENTS [input]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array['input'], 'type'))."<br>";
// *** BYTES TEST ***
$bytes = array(
-123123123,
999999, // KB-1
999999999, // MB-1
254779258, // MB-n
999999999999999, // TB-1
588795544887632, // TB-n
999999999999999999, // PB-1
9223372036854775807, // MAX INT
999999999999999999999, // EB-1
);
print "<b>BYTE FORMAT TESTS</b><br>";
foreach ($bytes as $byte) {
print '<div style="display: flex; border-bottom: 1px dashed gray;">';
//
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
print "(".number_format($byte)."/".$byte.") bytes :";
print '</div><div style="width: 40%;">';
print $basic->humanReadableByteFormat($byte);
print "</div>";
//
print "</div>";
//
print '<div style="display: flex; border-bottom: 1px dotted red;">';
//
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
print "bytes [si]:";
print '</div><div style="width: 40%;">';
// print $basic->byteStringFormat($byte, true, false, true);
print $basic->humanReadableByteFormat($byte, $basic::BYTE_FORMAT_SI);
print "</div>";
//
print "</div>";
}
// *** IMAGE TESTS ***
echo "<hr>";
// image thumbnail
$images = array(
// height bigger
// 'no_picture.jpg',
// 'no_picture.png',
// width bigger
// 'no_picture_width_bigger.jpg',
// 'no_picture_width_bigger.png',
// square
// 'no_picture_square.jpg',
// 'no_picture_square.png',
// other sample images
// '5c501af48da6c.jpg',
// Apple HEIC files
// 'img_2145.heic',
// Photoshop
'photoshop_test.psd',
);
$thumb_width = 250;
$thumb_height = 300;
// return mime type ala mimetype
$finfo = new finfo(FILEINFO_MIME_TYPE);
foreach ($images as $image) {
$image = BASE.LAYOUT.CONTENT_PATH.IMAGES.$image;
list ($height, $width, $img_type) = getimagesize($image);
echo "<div>IMAGE INFO: ".$height."x".$width.", TYPE: ".$img_type." [".$finfo->file($image)."]</div>";
// rotate image first
$basic->correctImageOrientation($image);
// thumbnail tests
echo "<div>".basename($image).": WIDTH: $thumb_width<br><img src=".$basic->createThumbnailSimple($image, $thumb_width)."></div>";
echo "<div>".basename($image).": HEIGHT: $thumb_height<br><img src=".$basic->createThumbnailSimple($image, 0, $thumb_height)."></div>";
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height)."></div>";
// test with dummy
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height (+DUMMY)<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height, null, true, false)."></div>";
echo "<hr>";
}
// mime test
$mime = 'application/vnd.ms-excel';
print "App for mime: ".$basic->mimeGetAppName($mime)."<br>";
$basic->mimeSetAppName($mime, 'Microsoft Excel');
print "App for mime changed: ".$basic->mimeGetAppName($mime)."<br>";
// print error messages
print $login->printErrorMsg();
// print $login->printErrorMsg();
print $basic->printErrorMsg();
print "</body></html>";

View File

@@ -1 +0,0 @@
../configs/config.inc

1
www/admin/config.php Symbolic link
View File

@@ -0,0 +1 @@
../configs/config.php

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1,322 +0,0 @@
<?php
/********************************************************************
* AUTHOR: Clemens "Gullevek" Schwaighofer (www.gullevek.org)
* CREATED: 2003/06/10
* SHORT DESCRIPTION:
* central include for all edit_pages
* - edit_groups.php
* - edit_languages.php
* - edit_pages.php
* - edit_schemes.php
* - edit_users.php
* - edit_visible_group.php
* HISTORY:
* 2005/06/30 (cs) remove color settings, they are in CSS File now
* 2005/06/22 (cs) moved load of config array into form class, set lang and lang is must set var for form class; removed the page name setting, moved it into the form class, remove all HTML from main page
* 2004/09/30 (cs) changed layout to fit default layout & changed LIBS, etc
* 2003-06-10: creation of this page
*********************************************************************/
$DEBUG_ALL = 1;
$DB_DEBUG = 1;
extract($_POST, EXTR_SKIP);
$table_width = 750;
// this is for certain CMS modules that set a relative path
define(REL_PATH, '');
ob_start();
include("config.inc");
// set session name here
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
// overrride debug flags
if (!DEBUG) {
$DEBUG_ALL = 0;
$PRINT_ALL = 0;
$DB_DEBUG = 0;
$ECHO_ALL = 0;
}
// set default lang if not set otherwise
if (!$lang) {
$lang = DEFAULT_LANG;
}
// should be utf8
header("Content-type: text/html; charset=".DEFAULT_ENCODING);
ob_end_flush();
$login = new CoreLibs\ACL\Login($DB_CONFIG[LOGIN_DB], $lang);
// create form class
$form = new CoreLibs\Output\Form\Generate($DB_CONFIG[MAIN_DB], $lang);
$form->dbExec("SET search_path TO ".LOGIN_DB_SCHEMA);
if ($form->mobile_phone) {
echo "I am sorry, but this page cannot be viewed by a mobile phone";
exit;
}
// smarty template engine (extended Translation version)
$smarty = new CoreLibs\Template\SmartyExtend($lang);
if (TARGET == 'live' || TARGET == 'remote') {
// login
$login->debug_output_all = DEBUG ? 1 : 0;
$login->echo_output_all = 0;
$login->print_output_all = DEBUG ? 1 : 0;
// form
$form->debug_output_all = DEBUG ? 1 : 0;
$form->echo_output_all = 0;
$form->print_output_all = DEBUG ? 1 : 0;
}
// set the template dir
// WARNING: this has a special check for the mailing tool layout (old layout)
if (defined('LAYOUT')) {
$smarty->setTemplateDir(LAYOUT.DEFAULT_TEMPLATE.TEMPLATES);
$DATA['css'] = LAYOUT.DEFAULT_TEMPLATE.CSS;
$DATA['js'] = LAYOUT.DEFAULT_TEMPLATE.JS;
} else {
$smarty->setTemplateDir(TEMPLATES.DEFAULT_TEMPLATE);
$DATA['css'] = CSS.DEFAULT_TEMPLATE;
$DATA['js'] = JS.DEFAULT_TEMPLATE;
}
// 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));
$form->formProcedureLoad(${$form->archive_pk_name});
$form->formProcedureNew();
$form->formProcedureSave();
$form->formProcedureDelete();
$form->formProcedureDeleteFromElementList($element_list, $remove_name);
// define all needed smarty stuff for the general HTML/page building
$HEADER['CSS'] = CSS;
$HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
$HEADER['JS'] = JS;
$HEADER['STYLESHEET'] = $EDIT_STYLESHEET;
$HEADER['JAVASCRIPT'] = $EDIT_JAVASCRIPT;
$DATA['table_width'] = $table_width;
// write out error / status messages
$messages[] = $form->formPrintMsg();
$DATA['form_error_msg'] = $messages;
// MENU START
// request some session vars
if (!$HEADER_COLOR) {
$DATA['HEADER_COLOR'] = "#E0E2FF";
} else {
$DATA['HEADER_COLOR'] = $_SESSION['HEADER_COLOR'];
}
$DATA['USER_NAME'] = $_SESSION["USER_NAME"];
$DATA['EUID'] = $_SESSION["EUID"];
$DATA['GROUP_NAME'] = $_SESSION["GROUP_NAME"];
$DATA['GROUP_LEVEL'] = $_SESSION["GROUP_LEVEL"];
$PAGES = $_SESSION["PAGES"];
//$form->debug('menu', $form->print_ar($PAGES));
// baue nav aus $PAGES ...
for ($i = 0; $i < count($PAGES); $i ++) {
if ($PAGES[$i]["menu"] && $PAGES[$i]["online"]) {
$menuarray[] = $PAGES[$i];
}
}
// split point for nav points
$COUNT_NAV_POINTS = count($menuarray);
$SPLIT_FACTOR = 3;
$START_SPLIT_COUNT = 3;
// WTF ?? I dunno what I am doing here ...
for ($i = 9; $i < $COUNT_NAV_POINTS; $i += $START_SPLIT_COUNT) {
if ($COUNT_NAV_POINTS > $i) {
$SPLIT_FACTOR += 1;
}
}
for ($i = 1; $i <= count($menuarray); $i ++) {
// do that for new array
$j = $i - 1;
$menu_data[$j]['pagename'] = htmlentities($menuarray[($i-1)]["page_name"]);
$menu_data[$j]['filename'] = $menuarray[($i-1)]["filename"].$menuarray[($i-1)]["query_string"];
if ($i == 1 || !(($i - 1) % $SPLIT_FACTOR)) {
$menu_data[$j]['splitfactor_in'] = 1;
}
if ($menuarray[($i - 1)]["filename"] == $form->getPageName()) {
$position = $i - 1;
$menu_data[$j]['position'] = 1;
} else {
// add query stuff
// HAS TO DONE LATER ... set urlencode, etc ...
// check if popup needed
if ($menuarray[($i - 1)]["popup"]) {
$menu_data[$j]['popup'] = 1;
$menu_data[$j]['rand'] = uniqid(rand());
$menu_data[$j]['width'] = $menuarray[($i-1)]["popup_x"];
$menu_data[$j]['height'] = $menuarray[($i-1)]["popup_y"];
} // popup or not
} // highlight or not
if (!($i % $SPLIT_FACTOR) || (($i + 1) > count($menuarray))) {
$menu_data[$j]['splitfactor_out'] = 1;
} // split
} // for
$DATA['menu_data'] = $menu_data;
$DATA['page_name'] = $menuarray[$position]["page_name"];
$L_TITLE = $DATA['page_name'];
// html title
$HEADER['HTML_TITLE'] = ((!$L_TITLE) ? $form->l->__($G_TITLE) : $form->l->__($L_TITLE));
// END MENU
// LOAD AND NEW
$DATA['load'] = $form->formCreateLoad();
$DATA['new'] = $form->formCreateNew();
// SHOW DATA PART
if ($form->yes) {
$DATA['form_yes'] = $form->yes;
$DATA['form_my_page_name'] = $form->my_page_name;
// depending on the "getPageName()" I show different stuff
switch ($form->my_page_name) {
case "edit_users":
$elements[] = $form->formCreateElement("login_error_count");
$elements[] = $form->formCreateElement("login_error_date_last");
$elements[] = $form->formCreateElement("login_error_date_first");
$elements[] = $form->formCreateElement("enabled");
$elements[] = $form->formCreateElement("username");
$elements[] = $form->formCreateElement("password");
$elements[] = $form->formCreateElement("password_change_interval");
$elements[] = $form->formCreateElement("email");
$elements[] = $form->formCreateElement("last_name");
$elements[] = $form->formCreateElement("first_name");
$elements[] = $form->formCreateElement("edit_group_id");
$elements[] = $form->formCreateElement("edit_access_right_id");
$elements[] = $form->formCreateElement("strict");
$elements[] = $form->formCreateElement("locked");
$elements[] = $form->formCreateElement("admin");
$elements[] = $form->formCreateElement("debug");
$elements[] = $form->formCreateElement("db_debug");
$elements[] = $form->formCreateElement("edit_language_id");
$elements[] = $form->formCreateElement("edit_scheme_id");
$elements[] = $form->formCreateElementListTable("edit_access_user");
break;
case "edit_schemes":
$elements[] = $form->formCreateElement("enabled");
$elements[] = $form->formCreateElement("name");
$elements[] = $form->formCreateElement("header_color");
$elements[] = $form->formCreateElement("template");
break;
case "edit_pages":
if (!$form->table_array["edit_page_id"]["value"]) {
$q = "DELETE FROM temp_files";
$form->dbExec($q);
// gets all files in the current dir ending with .php
$crap = exec("ls *.php", $output, $status);
// now get all that are NOT in de DB
$q = "INSERT INTO temp_files VALUES ";
for ($i = 0; $i < count($output); $i ++) {
$t_q = "('".$form->dbEscapeString($output[$i])."')";
$form->dbExec($q.$t_q, 'NULL');
}
$elements[] = $form->formCreateElement("filename");
} else {
// show file menu
// just show name of file ...
$DATA['filename_exist'] = 1;
$DATA['filename'] = $form->table_array["filename"]["value"];
} // File Name View IF
$elements[] = $form->formCreateElement("name");
// $elements[] = $form->formCreateElement("tag");
// $elements[] = $form->formCreateElement("min_acl");
$elements[] = $form->formCreateElement("order_number");
$elements[] = $form->formCreateElement("online");
$elements[] = $form->formCreateElement("menu");
$elements[] = $form->formCreateElementListTable("edit_query_string");
$elements[] = $form->formCreateElement("popup");
$elements[] = $form->formCreateElement("popup_x");
$elements[] = $form->formCreateElement("popup_y");
$elements[] = $form->formCreateElementReferenceTable("edit_visible_group");
$elements[] = $form->formCreateElementReferenceTable("edit_menu_group");
break;
case "edit_languages":
$elements[] = $form->formCreateElement("enabled");
$elements[] = $form->formCreateElement("short_name");
$elements[] = $form->formCreateElement("long_name");
$elements[] = $form->formCreateElement("iso_name");
break;
case "edit_groups":
$elements[] = $form->formCreateElement("enabled");
$elements[] = $form->formCreateElement("name");
$elements[] = $form->formCreateElement("edit_access_right_id");
$elements[] = $form->formCreateElement("edit_scheme_id");
$elements[] = $form->formCreateElementListTable("edit_page_access");
break;
case "edit_visible_group":
$elements[] = $form->formCreateElement("name");
$elements[] = $form->formCreateElement("flag");
break;
case "edit_menu_group":
$elements[] = $form->formCreateElement("name");
$elements[] = $form->formCreateElement("flag");
$elements[] = $form->formCreateElement("order_number");
break;
case "edit_access":
$elements[] = $form->formCreateElement("name");
$elements[] = $form->formCreateElement("color");
$elements[] = $form->formCreateElement("description");
// add name/value list here
$elements[] = $form->formCreateElementListTable("edit_access_data");
break;
default:
print "[No valid page definition given]";
break;
}
// $form->debug('edit', "Elements: <pre>".$form->print_ar($elements));
$DATA['elements'] = $elements;
$DATA['hidden'] = $form->formCreateHiddenFields();
$DATA['save_delete'] = $form->formCreateSaveDelete();
}
// debug data, if DEBUG flag is on, this data is print out
$DEBUG_DATA['DEBUG'] = $DEBUG_TMPL;
// create main data array
$CONTENT_DATA = array_merge($HEADER, $DATA, $DEBUG_DATA);
// data is 1:1 mapping (all vars, values, etc)
while (list($key, $value) = each($CONTENT_DATA)) {
$smarty->assign($key, $value);
}
if (is_dir(BASE.TEMPLATES_C)) {
$smarty->setCompileDir(BASE.TEMPLATES_C);
}
if (is_dir(BASE.CACHE)) {
$smarty->setCacheDir(BASE.CACHE);
}
$smarty->display('edit_body.tpl');
// debug output
echo $login->printErrorMsg();
echo $form->printErrorMsg();
# __END__

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1,196 +0,0 @@
<?php
/********************************************************************
* AUTHOR: Clemens Schwaighofer
* CREATED: 2001/07/11
* SHORT DESCRIPTION:
* sets the order from a table (edit_)
* HISTORY:
* 2005/07/11 (cs) adept to new edit interface
* 2002-10-18: little include changes
* 2001-07-11: erste Version
**********************************************************************/
$DEBUG_ALL = 1;
$DB_DEBUG = 1;
extract($_GET, EXTR_SKIP);
extract($_POST, EXTR_SKIP);
include("config.inc");
// set session name
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
// overrride debug flags
if (!DEBUG) {
$DEBUG_ALL = 0;
$PRINT_ALL = 0;
$DB_DEBUG = 0;
$ECHO_ALL = 0;
}
// default lang
if (!$lang) {
$lang = DEFAULT_LANG;
}
$table_width = 600;
if (!$table_width) {
$table_width = PAGE_WIDTH;
}
ob_end_flush();
$login = new CoreLibs\ACL\Login($DB_CONFIG[LOGIN_DB], $lang);
$db = new CoreLibs\DB\IO($DB_CONFIG[MAIN_DB]);
$db->dbExec("SET search_path TO ".LOGIN_DB_SCHEMA);
$smarty = new CoreLibs\Template\SmartyExtend($lang);
if (TARGET == 'live' || TARGET == 'remote') {
// login
$login->debug_output_all = DEBUG ? 1 : 0;
$login->echo_output_all = 0;
$login->print_output_all = DEBUG ? 1 : 0;
// form
$db->debug_output_all = DEBUG ? 1 : 0;
$db->echo_output_all = 0;
$db->print_output_all = DEBUG ? 1 : 0;
}
// set the template dir
if (defined('LAYOUT')) {
$smarty->setTemplateDir(LAYOUT.DEFAULT_TEMPLATE.TEMPLATES);
$DATA['css'] = LAYOUT.DEFAULT_TEMPLATE.CSS;
$DATA['js'] = LAYOUT.DEFAULT_TEMPLATE.JS;
} else {
$smarty->setTemplateDir(TEMPLATES.DEFAULT_TEMPLATE);
$DATA['css'] = CSS.DEFAULT_TEMPLATE;
$DATA['js'] = JS.DEFAULT_TEMPLATE;
}
// order name is _always_ order_number for the edit interface
// follwing arrays do exist here:
// $position ... has the positions of the array (0..max), cause in a <select>
// I can't put an number into the array field, in this array,
// there are the POSITION stored, that should CHANGE there order (up/down)
// $row_data_id ... has ALL ids from the sorting part
// $row_data_order ... has ALL order positions from the soirting part
if (count($position)) {
$original_id = $row_data_id;
// FIRST u have to put right sort, then read again ...
// hast to be >0 or the first one is selected and then there is no move
if ($up && $position[0] > 0) {
for ($i = 0; $i < count($position); $i++) {
// change position order
// this gets temp, id before that, gets actual (moves one "down")
// this gets the old before (moves one "up")
// is done for every element in row
// echo "A: ".$row_data_id[$position[$i]]." (".$row_data_order[$position[$i]].") -- ".$row_data_id[$position[$i]-1]." (".$row_data_order[$position[$i]-1].")<br>";
$temp_id = $row_data_id[$position[$i]];
$row_data_id[$position[$i]] = $row_data_id[$position[$i]-1];
$row_data_id[$position[$i]-1] = $temp_id;
// echo "A: ".$row_data_id[$position[$i]]." (".$row_data_order[$position[$i]].") -- ".$row_data_id[$position[$i]-1]." (".$row_data_order[$position[$i]-1].")<br>";
} // for
} // if up
// the last position id from position array is not to be the count-1 of row_data_id array, or it is the last element
if ($down && ($position[count($position) - 1] != (count($row_data_id) - 1))) {
for ($i = count($position) - 1; $i >= 0; $i --) {
// same as up, just up in other way, starts from bottom (last element) and moves "up"
// element before actuel gets temp, this element, becomes element after this,
// element after this, gets this
$temp_id = $row_data_id[$position[$i] + 1];
$row_data_id[$position[$i] + 1] = $row_data_id[$position[$i]];
$row_data_id[$position[$i]] = $temp_id;
} // for
} // if down
// write data ... (which has to be abstrackt ...)
if (($up && $position[0] > 0) || ($down && ($position[count($position) - 1]!=(count($row_data_id) - 1)))) {
for ($i = 0; $i < count($row_data_id); $i ++) {
$q = "UPDATE ".$table_name." SET order_number = ".$row_data_order[$i]." WHERE ".$table_name."_id = ".$row_data_id[$i];
$q = $db->dbExec($q);
} // for all article ids ...
} // if write
} // if there is something to move
// get ...
$q = "SELECT ".$table_name."_id, name, order_number FROM ".$table_name." ";
if ($where_string) {
$q .= "WHERE $where_string ";
}
$q .= "ORDER BY order_number";
while ($res = $db->dbReturn($q)) {
$row_data[] = array (
"id" => $res[$table_name."_id"],
"name" => $res["name"],
"order" => $res["order_number"]
);
} // while read data ...
// define all needed smarty stuff for the general HTML/page building
$DATA['css'] = LAYOUT.DEFAULT_TEMPLATE.CSS;
$DATA['js'] = LAYOUT.DEFAULT_TEMPLATE.JS;
$HEADER['CSS'] = CSS;
$HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
$HEADER['JS'] = JS;
$HEADER['STYLESHEET'] = $EDIT_STYLESHEET;
$HEADER['JAVASCRIPT'] = $EDIT_JAVASCRIPT;
// html title
$HEADER['HTML_TITLE'] = (!$L_TITLE) ? $smarty->l10n->__($G_TITLE) : $smarty->l10n->__($L_TITLE);
$DATA['table_width'] = $table_width;
// error msg
if ($error) {
$messages[] = array('msg' => $msg, 'class' => 'error', 'width' => $table_width);
}
$DATA['form_error_msg'] = $messages;
// all the row data
$options_id = array();
$options_name = array();
$options_selected = array();
for ($i = 0; $i < count($row_data); $i ++) {
$options_id[] = $i;
$options_name[] = $row_data[$i]["name"];
// list of points to order
for ($j = 0; $j < count($position); $j++) {
// if matches, put into select array
if ($original_id[$position[$j]] == $row_data[$i]["id"]) {
$options_selected[] = $i;
}
}
}
$DATA['options_id'] = $options_id;
$DATA['options_name'] = $options_name;
$DATA['options_selected'] = $options_selected;
// hidden list for the data (id, order number)
$row_data_id = array();
$row_data_order = array();
for ($i = 0; $i < count($row_data); $i++) {
$row_data_id[] = $row_data[$i]["id"];
$row_data_order[] = $row_data[$i]["order"];
}
$DATA['row_data_id'] = $row_data_id;
$DATA['row_data_order'] = $row_data_order;
// hidden names for the table & where string
$DATA['table_name'] = $table_name;
$DATA['where_string'] = $where_string;
// debug data, if DEBUG flag is on, this data is print out
$DEBUG_DATA['DEBUG'] = $DEBUG_TMPL;
// create main data array
$CONTENT_DATA = array_merge($HEADER, $DATA, $DEBUG_DATA);
// data is 1:1 mapping (all vars, values, etc)
while (list($key, $value) = each($CONTENT_DATA)) {
$smarty->assign($key, $value);
}
$smarty->display('edit_order.tpl');
echo $login->printErrorMsg();
echo $db->printErrorMsg();
# __END__

1
www/admin/edit_order.php Symbolic link
View File

@@ -0,0 +1 @@
../includes/edit_base.php

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1 +1 @@
edit_base.inc
../includes/edit_base.php

View File

@@ -1,4 +1,4 @@
<?php
<?php declare(strict_types=1);
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
$DEBUG_ALL = 1;
@@ -10,9 +10,9 @@ if ($DEBUG_ALL) {
}
// sample config
require("config.inc");
echo "FILE: ".BASE.LIB."Error.Handling.inc<br>";
require(BASE.LIB."Error.Handling.inc");
require 'config.php';
echo "FILE: ".BASE.LIB."Error.Handling.php<br>";
require(BASE.LIB."Error.Handling.php");
if ($var) {
echo "OUT<br>";

View File

@@ -1,480 +0,0 @@
<?php
/********************************************************************
* AUTHOR: Clemens Schwaighofer
* CREATED: 2005/07/13
* SHORT DESCRIPTION:
* Create categories for CMS
* HISTORY:
* 2005/08/19 (cs) changed the mime type get from the _FILE to mime get fkt
*********************************************************************/
// DEBUG vars here
$DEBUG_ALL = 1;
$DB_DEBUG = 1;
$DEBUG_TMPL = 1;
//------------------------------ header
require("header.inc");
$MASTER_TEMPLATE_NAME = 'cms_popup.tpl';
$TEMPLATE_NAME = 'cms_files.tpl';
$PAGE_WIDTH = 750;
require("set_paths.inc");
//------------------------------ header
//------------------------------ processing data start
$form_name = $_GET['form'];
$value_name = $_GET['name'];
$data_id = $_GET['id'];
$show_type = $_GET['type']; // P (pic), F (flash), V (video), D (document: word), A (document: pdf), B (binary); , separated string
// default view is list
if (!$view && !$data_id) {
$view = 'list';
} elseif (!$view && $data_id) {
$view = 'list';
}
// default is online
if (!isset($online)) {
$online = 't';
}
// if not set, it is a fresh load
if (!$show_amount) {
$fresh_load = 1;
}
// the next two are for page view
if (!$start_row) {
$start_row = 0;
}
if (!$show_amount) {
$show_amount = 12;
}
if (!$show_type) {
$show_type = 'P';
}
// set edit access array
$edit_access_ids = array_keys($cms->user_unit);
// yes no list (online)
$yesno_list['f'] = 'No';
$yesno_list['t'] = 'Yes';
// order list
$sort_order_list['date_created'] = 'ID / Insert time'; // default
$sort_order_list['file_name'] = 'File Name';
$sort_order_list['file_size'] = 'File Size';
$sort_order_list['mime_type'] = 'Mime Type';
$sort_order_list['name_en'] = 'Alt Name English';
$sort_order_list['name_ja'] = 'Alt Name Japanese';
$sort_order_list['date_updated'] = 'Updated';
if (!$sort_order) {
$sort_order = 'date_created';
}
$sort_direction_list['ASC'] = 'Normal';
$sort_direction_list['DESC'] = 'Reverse';
if (!$sort_direction) {
$sort_direction = 'ASC';
}
// set if we need to write to any of the set live queues
// a) on page save with set_live
// b) global page with live_queue
// set via QUEUE variable
// create 0 entries for: templates, menu, data_group?
if ($cms->action == 'new' && $cms->action_yes == 'true') {
unset($file_uid);
unset($file_id);
unset($file_type);
$new_okay = 1;
}
// file type: P picture, M mouse over picutre, F flash, V video, B binary
if ($cms->action == 'save') {
if (!$file_type) {
$file_type = 'B';
}
$file_ok = false;
if (!$_FILES['file_up']['name'] && !$file_uid) {
$cms->messages[] = array('msg' => 'No file name given', 'class' => 'error');
$error = 1;
}
if (!$_FILES['file_up']['name'] && $file_uid) {
$file_ok = true;
}
// echo "FILE TYPE: ".$_FILES['file_up']['type']."<br>";
foreach (split(',', $show_type) as $_show_type) {
// check if the uploaded filename matches to the given type
if ($_FILES['file_up']['name'] && preg_match("/jpeg|png|gif/", $_FILES['file_up']['type']) && preg_match("/P/", $show_type)) {
$file_ok = true;
}
if ($_FILES['file_up']['name'] && preg_match("/swf/", $_FILES['file_up']['type']) && preg_match("/F/", $show_type)) {
$file_ok = true;
}
if ($_FILES['file_up']['name'] && preg_match("/video/", $_FILES['file_up']['type']) && preg_match("/V/", $show_type)) {
$file_ok = true;
}
if ($_FILES['file_up']['name'] && preg_match("/msword|vnd.oasis.opendocument.text/", $_FILES['file_up']['type']) && preg_match("/D/", $show_type)) {
$file_ok = true;
}
if ($_FILES['file_up']['name'] && preg_match("/pdf/", $_FILES['file_up']['type']) && preg_match("/A/", $show_type)) {
$file_ok = true;
}
if ($_FILES['file_up']['name'] && preg_match("/B/", $show_type)) {
$file_ok = true;
}
}
// write out error messages according to show type
if (!$file_ok) {
if (preg_match("/P/", $show_type)) {
$cms->messages[] = array('msg' => 'File is not a JPEG/PNG/GIF file', 'class' => 'error');
$error = 1;
}
if (preg_match("/F/", $show_type)) {
$cms->messages[] = array('msg' => 'File is not a Flash File', 'class' => 'error');
$error = 1;
}
if (preg_match("/V/", $show_type)) {
$cms->messages[] = array('msg' => 'File is not a Video', 'class' => 'error');
$error = 1;
}
if (preg_match("/D/", $show_type)) {
$cms->messages[] = array('msg' => 'File is not a DOC/ODT file', 'class' => 'error');
$error = 1;
}
if (preg_match("/A/", $show_type)) {
$cms->messages[] = array('msg' => 'File is not a PDF file', 'class' => 'error');
$error = 1;
}
if (preg_match("/B/", $show_type)) {
$cms->messages[] = array('msg' => 'No valid file was given', 'class' => 'error');
$error = 1;
}
}
// binary: all okay
// if no error, save data
if (!$error) {
if ($_FILES['file_up']['name']) {
$mime_type = $_FILES['file_up']['type'];
$file_size = $_FILES['file_up']['size'];
$file_name = $_FILES['file_up']['name'];
// get picture size
list($width, $height) = getimagesize($_FILES['file_up']['tmp_name']);
$cms->debug('upload', "Width: $width X Height: $height");
// set the file type and the target folder
if (preg_match("/jpeg|png|gif/", $mime_type)) {
$file_type = 'P';
} elseif (preg_match("/swf/", $mime_type)) {
$file_type = 'F';
} elseif (preg_match("/video/", $mime_type)) {
$file_type = 'V';
} elseif (preg_match("/msword|vnd.oasis.opendocument.text/", $mime_type)) {
$file_type = 'D';
} elseif (preg_match("/pdf/", $mime_type)) {
$file_type = 'A';
} elseif ($mime_type) {
$file_type = 'B';
}
}
// if we have an id -> updated
if ($file_uid) {
$q = "UPDATE file SET";
$q_set = " name_en = '".addslashes($name_en)."', name_ja = '".addslashes($name_ja)."', file_name = '".addslashes($file_name)."', online = '".$online."' ";
if ($_FILES['file_up']['name']) {
$q_set .= ", type = '".$file_type."', mime_type = '$mime_type', file_size = $file_size, size_x = $width, size_y = $height ";
}
$q .= $q_set."WHERE file_uid = '".$file_uid."'";
$cms->db_exec($q);
if (QUEUE == 'live_queue') {
$sql_action = 'UPDATE';
$sql_data = $q_set;
}
} else {
// insert new data
$file_uid = md5(uniqid(rand(), true));
$q = "INSERT INTO file (name_en, name_ja, file_name, online, mime_type, file_size, size_x, size_y, file_uid, type) VALUES (";
$q .= "'".addslashes($name_en)."', '".addslashes($name_ja)."', '".addslashes($file_name)."', '".$online."', '".$mime_type."', ";
$q .= "$file_size, ".(($width) ? $width : 'NULL').", ".(($height) ? $height : 'NULL').", '".$file_uid."', '".$file_type."')";
$cms->db_exec($q);
$file_id = $cms->insert_id;
// if queue
if (QUEUE == 'live_queue') {
$sql_data = $q;
$sql_action = 'INSERT';
}
}
$size_x = $width;
$size_y = $height;
$file = DEV_SCHEMA."_".$file_uid;
// now upload the file
if ($_FILES['file_up']['name']) {
$upload_file = BASE.MEDIA.$cms->data_path[$file_type].$file;
// wipe out any old tmp data for this new upload
if (is_array(glob(BASE.TMP."thumb_".$file."*"))) {
foreach (glob(BASE.TMP."thumb_".$file."*") as $filename) {
@unlink($filename);
}
}
# copy file to correct path
$error = move_uploaded_file($_FILES['file_up']['tmp_name'], $upload_file);
$cms->debug('file_upload', "UP: $upload_file");
$cms->debug('file_upload', "Orig: ".$cms->printAr($_FILES['file_up']));
// because I get bogus error info from move_uploaded_file ...
$error = 0;
if ($error) {
$cms->debug('file_upload', "ERROR: $error | INI FSize: ".ini_get("upload_max_filesize"));
$cms->messages[] = array('msg' => 'File upload failed', 'class' => 'error');
$q = "DELETE FROM file WHERE file_uid = '".$file_uid."'";
$cms->db_exec($q);
unset($file_id);
unset($file_uid);
$view = 'list';
} else {
$cms->messages[] = array('msg' => 'File upload successful', 'class' => 'warning');
// $view = 'list';
}
} // if file upload
// create thumbs + file size
$picture = $cms->cache_pictures.$cms->adbCreateThumbnail($file, 400, 280, $file_type, '', $cms->cache_pictures_root);
$picture_small = $cms->cache_pictures.$cms->adbCreateThumbnail($file, 80, 60, $file_type, '', $cms->cache_pictures_root);
$file_size = $cms->adbByteStringFormat($file_size);
// for live queue this is here needed
if (QUEUE == 'live_queue') {
$q = "INSERT INTO ".GLOBAL_DB_SCHEMA.".live_queue (queue_key, key_value, key_name, type, target, data, group_key, action";
if ($_FILES['file_up']['name']) {
$q .= ", file";
}
$q .= ") VALUES ('".$cms->queue_name."', '".$file_uid."', 'file_uid', '".$sql_action."', 'file', '".$cms->db_escape_string($sql_data)."', '".$cms->queue_key."', '".$cms->action."'";
if ($_FILES['file_up']['name']) {
$q .= ", '".BASE.MEDIA.$cms->data_path[$file_type].$file."#".BASE.MEDIA.$cms->data_path[$file_type].PUBLIC_SCHEMA."_".$file_uid."'";
}
$q .= ")";
$cms->db_exec($q);
}
} // if not error
}
if ($cms->action == 'delete' && $cms->action_yes == 'true') {
$file_uid = $cms->action_id;
$q = "SELECT type FROM file WHERE file_uid = '".$file_uid."'";
list ($file_type) = $cms->db_return_row($q);
// get the file type for the file path
$q = "DELETE FROM file WHERE file_uid = '".$file_uid."'";
$cms->db_exec($q);
if (QUEUE == 'set_live') {
$q = "INSERT INTO ".GLOBAL_DB_SCHEMA.".set_live (table_name, pkid, delete_flag) VALUES ('".$cms->page_name."', ".$file_uid.", 't')";
$cms->db_exec($q);
}
if (QUEUE == 'live_queue') {
$q = "INSERT INTO ".GLOBAL_DB_SCHEMA.".live_queue (queue_key, key_value, key_name, type, target, data, group_key, action, file) VALUES (";
$q .= "'".$cms->queue_name."', '".$file_uid."', 'file_uid', 'DELETE', 'file', '', '".$cms->queue_key."', '".$cms->action."', '".
$q .= BASE.MEDIA.$cms->data_path[$file_type].PUBLIC_SCHEMA."_".$file_uid."')";
}
@unlink(BASE.MEDIA.$cms->data_path[$file_type].DEV_SCHEMA."_".$file_uid);
// wipe out any old cache data for this new upload
if (is_array(glob($cms->cache_pictures."thumb_".TEST_SCHEMA."_".$file_uid."*"))) {
foreach (glob($cms->cache_pictures."thumb_".TEST_SCHEMA."_".$file_uid."*") as $filename) {
@unlink($filename);
}
}
unset($file_uid);
unset($file_id);
$delete_done = 1;
$view = 'list';
}
if ($cms->action == 'load') {
$file_uid = $cms->action_id;
// load the data
$q = "SELECT file_id, name_en, name_ja, file_name, online, mime_type, file_size, size_x, size_y, type FROM file WHERE file_uid = '".$file_uid."'";
list($file_id, $name_en, $name_ja, $file_name, $online, $mime_type, $file_size, $size_x, $size_y, $file_type) = $cms->db_return_row($q);
// create thumbnail for edit view
$file = DEV_SCHEMA."_".$file_uid;
// thumbnails are only valid for pictures
$picture = $cms->cache_pictures.$cms->adbCreateThumbnail($file, 400, 280, $file_type, '', $cms->cache_pictures_root);
$picture_small = $cms->cache_pictures.$cms->adbCreateThumbnail($file, 80, 60, $file_type, '', $cms->cache_pictures_root);
$file_size = $cms->adbByteStringFormat($file_size);
// view to edit
$view = 'edit';
}
if ($cms->action == 'add_new') {
$view = 'edit';
}
if ($cms->action == 'view_files' && $cms->action_yes == 'true') {
$view = 'list';
}
// set delete live
if ($cms->action_flag == 'set_live' && $cms->action = 'set_delete') {
$q = "SELECT file_uid, pkid, type FROM ".LOGIN_DB_SCHEMA.".set_live sl, file f WHERE sl.pkid = f.file_uid table_name = '".$cms->page_name."' AND delete_flag = 't'";
while ($res = $cms->db_return($q)) {
$q_del = "DELETE FROM ".PUBLIC_SCHEMA.".file WHERE file_uid = '".$res['pkid'].'"';
$cms->db_exec($q_del);
@unlink(BASE.MEDIA.$cms->data_path[$res['type']].PUBLIC_SCHEMA."_".$res['file_uid']);
// wipe out any old cache data for this new upload
if (is_array(glob($cms->cache_pictures."thumb_".LIVE_SCHEMA."_".$file_uid."*"))) {
foreach (glob($cms->cache_pictures."thumb_".LIVE_SCHEMA."_".$file_uid."*") as $filename) {
@unlink($filename);
}
}
}
$q = "DELETE FROM ".LOGIN_DB_SCHEMA.".set_live WHERE table_name = '".$cms->page_name."' AND delete_flag = 't'";
$cms->db_exec($q);
}
if (DEV_SCHEMA != PUBLIC_SCHEMA) {
// read out possible deleted, to add "delete from live"
$q = "SELECT pkid FROM ".LOGIN_DB_SCHEMA.".set_live WHERE table_name = '".$cms->page_name."' AND delete_flag = 't'";
if ($cms->access_rights['base_acl'] < 90) {
$q .= "AND edit_access_id IN (".join(',', $edit_access_ids).") ";
}
while ($res = $cms->db_return($q, 3)) {
$cms->DATA['set_delete'][]['pkid'] = $res['pkid'];
}
}
// get th max entries
$q = "SELECT COUNT(file_uid) FROM file ";
$q_search_where = "WHERE ";
// only for current edit_access id, unless it is an admin user, then he can see all of them
if ($cms->access_rights['base_acl'] < 90) {
$q_search_where .= "edit_access_id IN (".join(',', $edit_access_ids).") AND ";
}
$q_search_where .= "type in ('".str_replace(',', "','", $show_type)."') ";
if ($search_what) {
$q_search_where .= "AND LOWER(name_en) LIKE '%".addslashes(strtolower($search_what))."%' OR name_ja LIKE '%".addslashes($search_what)."%' OR LOWER(file_name) LIKE '%".addslashes(strtolower($search_what))."%' ";
}
$q .= $q_search_where;
// get selection from show_type
list ($file_count) = $cms->db_return_row($q);
if ($cms->action == 'browse') {
// browse in the list of data
switch ($cms->action_id) {
case "<<<<":
$start_row = 0;
break;
case "<":
$start_row -= $show_amount;
break;
case ">":
$start_row += $show_amount;
break;
case ">>>>":
$start_row = $file_count - $show_amount;
break;
case "gopage":
// for page is page -1, so page 1 start from 0, etc
$start_row = ((($cms->action_value - 1) > 0) ? ($cms->action_value - 1) * $show_amount : 0);
$current_page = $cms->action_value;
break;
}
}
// check overflow
if ($start_row < 0) {
$start_row = 0;
}
if ($start_row > $file_count) {
$start_row = $file_count - $show_amount;
}
// if we have a "fresh_load"
if ($fresh_load) {
$count = 1;
$q = "SELECT file_uid FROM file ";
if ($q_search_where) {
$q .= $q_search_where;
}
$q .= "ORDER BY ".$sort_order." ".$sort_direction." ";
while ($res = $cms->db_return($q)) {
// if data_id is set and not file_id, go to the page where the current highlight is, but only if this is a "virgin" load of the page
if ($data_id && ($data_id == $res['file_uid'])) {
$current_page = floor(($count / $show_amount));
$start_row = $current_page * $show_amount;
$current_page ++;
}
$count ++;
}
}
// page forward/back buttons settings
if ($start_row > 0) {
$cms->DATA['show_back'] = 1;
}
$cms->DATA['page_number'] = ceil($start_row / $show_amount) + 1;
$cms->DATA['page_count'] = ceil($file_count / $show_amount);
if ($cms->DATA['page_count'] > 2 && !$current_page) {
$current_page = 1;
}
if (($start_row + $show_amount) < $file_count) {
$cms->DATA['show_forward'] = 1;
}
$q = "SELECT file_id, name_en, name_ja, file_name, online, mime_type, file_size, size_x, size_y, file_uid, type FROM file ";
// if search what, search in name_en, name_ja, file_name for the string
if ($q_search_where) {
$q .= $q_search_where;
}
$q .= "ORDER BY ".$sort_order." ".$sort_direction." ";
$q .= "LIMIT ".$show_amount." OFFSET ".$start_row;
while ($res = $cms->db_return($q)) {
$data_files[] = array (
'id' => $res['file_id'],
'name_en' => $res['name_en'],
'name_ja' => $res['name_ja'],
'file_name' => $res['file_name'],
'online' => $res['online'],
'mime_type' => $res['mime_type'],
'file_size' => $cms->adbByteStringFormat($res['file_size']),
'size_x' => $res['size_x'],
'size_y' => $res['size_y'],
'file_uid' => $res['file_uid'],
'file_type' => $res['type'],
'picture' => $cms->cache_pictures.$cms->adbCreateThumbnail(DEV_SCHEMA.'_'.$res['file_uid'], 80, 60, $res['type'], '', $cms->cache_pictures_root)
);
}
$cms->DATA['show_type'] = $show_type;
$cms->DATA['data_files'] = $data_files;
$cms->DATA['view'] = $view;
$cms->DATA['images_path'] = MEDIA.$cms->data_path[$file_type];
// get vars for position (only when)
$cms->DATA['form_name'] = $form_name;
$cms->DATA['value_name'] = $value_name;
$cms->DATA['file_id'] = $file_id;
$cms->DATA['file_uid'] = $file_uid;
// write back all the other vars
if (!($delete_done || $new_okay)) {
// data name
$cms->DATA['file_name'] = $file_name;
$cms->DATA['name_en'] = $name_en;
$cms->DATA['name_ja'] = $name_ja;
$cms->DATA['mime_type'] = $mime_type;
$cms->DATA['file_size'] = $file_size;
$cms->DATA['size_x'] = $size_x;
$cms->DATA['size_y'] = $size_y;
$cms->DATA['online'] = $online;
$cms->DATA['picture'] = $picture;
$cms->DATA['picture_small'] = $picture_small;
$cms->DATA['file_type'] = $file_type;
}
$cms->DATA['sort_order_list'] = $sort_order_list;
$cms->DATA['sort_order'] = $sort_order;
$cms->DATA['sort_direction_list'] = $sort_direction_list;
$cms->DATA['sort_direction'] = $sort_direction;
$cms->DATA['search_what'] = $search_what;
$cms->DATA['current_page'] = $current_page;
$cms->DATA['yesno_list'] = $yesno_list;
$cms->DATA['start_row'] = $start_row;
$cms->DATA['show_amount'] = $show_amount;
if ($data_id) {
$cms->DATA['data_id'] = $data_id;
}
$cms->DATA['top'] = 0;
$cms->DATA['left'] = 0;
//------------------------------ processing data end
//------------------------------ smarty start
require("smarty.inc");
//------------------------------ smarty end
//------------------------------ footer
require("footer.inc");
//------------------------------ footer

View File

@@ -1,51 +0,0 @@
<?
/********************************************************************
* AUTHOR: Clemens Schwaighofer
* CREATED: 2005/07/19
* SHORT DESCRIPTION:
* preset date variables
* HISTORY:
*********************************************************************/
$day_short[1] = "Mon";
$day_short[2] = "Tue";
$day_short[3] = "Wed";
$day_short[4] = "Thu";
$day_short[5] = "Fri";
$day_short[6] = "Sat";
$day_short[7] = "Sun";
$day_long[1] = "Monday";
$day_long[2] = "Tuesday";
$day_long[3] = "Wednesday";
$day_long[4] = "Thursday";
$day_long[5] = "Friday";
$day_long[6] = "Saturday";
$day_long[7] = "Sunday";
// monate
$month_long[1] = "January";
$month_long[2] = "February";
$month_long[3] = "March";
$month_long[4] = "April";
$month_long[5] = "May";
$month_long[6] = "June";
$month_long[7] = "July";
$month_long[8] = "August";
$month_long[9] = "September";
$month_long[10] = "October";
$month_long[11] = "November";
$month_long[12] = "December";
$month_short[1] = "Jan";
$month_short[2] = "Feb";
$month_short[3] = "Mar";
$month_short[4] = "Apr";
$month_short[5] = "May";
$month_short[6] = "Jun";
$month_short[7] = "Jul";
$month_short[8] = "Aug";
$month_short[9] = "Sep";
$month_short[10] = "Oct";
$month_short[11] = "Nov";
$month_short[12] = "Dec";

29
www/admin/l10n_test.php Executable file
View File

@@ -0,0 +1,29 @@
<?php declare(strict_types=1);
// debug for L10n issues in php 7.3
// namespace test
ob_start();
// init language
$lang = 'en_utf8';
// admin class tests
require 'config.php';
$l = new CoreLibs\Language\L10n($lang);
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__

View File

@@ -1,6 +1,4 @@
<?php
declare(strict_types=1);
<?php declare(strict_types=1);
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
$DEBUG_ALL = 1;
@@ -11,31 +9,33 @@ $DB_DEBUG = 1;
ob_start();
// admin class tests
require 'config.inc' ;
DEFINE('SET_SESSION_NAME', EDIT_SESSION_NAME);
require 'config.php';
$SET_SESSION_NAME = EDIT_SESSION_NAME;
echo "DIR: ".DIR."<br>ROOT: ".ROOT."<br>BASE: ".BASE."<br>";
$lang = 'ja_utf8';
$base = new CoreLibs\Admin\Backend($DB_CONFIG[MAIN_DB], $lang);
$base = new CoreLibs\Admin\Backend(DB_CONFIG);
ob_end_flush();
if ($base->getConnectionStatus()) {
die("Cannot connect to database");
}
print "Start time: ".$base->runningTime()."<br>";
print "ByteStringFormat: ".$base->ByteStringFormat(1234567.12)."<br>";
print "byteStringFormat: ".$base->byteStringFormat(1234567.12)."<br>";
print "get_page_name [DEPRECATED]: ".$base->get_page_name()."<br>";
print "HumanReadableByteFormat: ".$base->HumanReadableByteFormat(1234567.12)."<br>";
print "humanReadableByteFormat: ".$base->humanReadableByteFormat(1234567.12)."<br>";
// print "get_page_name [DEPRECATED]: ".$base->get_page_name()."<br>";
print "getPageName: ".$base->getPageName()."<br>";
print "DB Info: ".$base->dbInfo(1)."<br>";
print "DB Info: ".$base->dbInfo(true)."<br>";
print "End Time: ".$base->runningTime()."<br>";
print "Run Time: ".$base->runningTime()."<br>";
$base->resetRunningtime();
print "Start Time: ".$base->runningTime()."<br>";
print "Lang: ".$base->l->__getLang().", MO File: ".$base->l->__getMoFile()."<br>";
print "Translate test: Year -> ".$base->l->__('Year')."<br>";
print "End Time: ".$base->runningTime()."<br>";
// end error print
print $base->printErrorMsg();

View File

@@ -1,4 +1,4 @@
<?php
<?php declare(strict_types=1);
namespace Foo;
@@ -21,3 +21,14 @@ class FooBar
echo "B: $wrong<br>";
}
}
$foo = $bar ?? 'EMPTY';
echo "BAR: ".$foo."<br>";
// define('DS', DIRECTORY_SEPARATOR);
$ds = defined('DS') ? DS : DIRECTORY_SEPARATOR;
$du = DS ?? DIRECTORY_SEPARATOR;
echo "DS is: ".$ds."<br>";
echo "SERVER HOST: ".$_SERVER['HTTP_HOST']."<br>";
// __END__

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

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

View File

@@ -0,0 +1,46 @@
<?php
$DEBUG_ALL = 1;
$ECHO_ALL = 0;
$PRINT_ALL = 1;
// load the Basic && qq file uploader here
require 'config.php';
// class load
$base = new CoreLibs\Basic();
$base->debug('AJAX UPLOAD', 'START Backend');
// set max upload size
$MAX_UPLOAD_SIZE = $base->StringByteFormat(ini_get('upload_max_filesize'));
// test for qqFileUploader (AJAX side)
$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 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'];
$get_post['start'] = microtime(true);
$base->debug('AJAX UPLOAD', 'Action: '.$_action.', Task UID: '.$_task_uid.' => '.$base->dateStringFormat($get_post['start']));
$upload_path = ROOT.MEDIA.UPLOADS;
$get_post['result'] = $uploader->handleUpload($upload_path, false);
$base->debug('AJAX UPLOAD', 'Memory peak: '.$base->ByteStringFormat(memory_get_usage()).' | '.$base->ByteStringFormat(memory_get_peak_usage()));
// set file name
$get_post['filename'] = $uploader->uploadFileName;
$get_post['type'] = $uploader->uploadFileExt;
$get_post['filesize'] = filesize($uploader->uploadFileName);
$get_post['filesize_formated'] = $base->ByteStringFormat($get_post['filesize']);
$get_post['end'] = microtime(true);
$get_post['time'] = $get_post['end'] - $get_post['start'];
$base->debug('AJAX RESULT', $base->printAr($get_post));
// return data
$output = htmlspecialchars(json_encode($get_post), ENT_NOQUOTES);
// $base->debug('AJAX JSON', $output);
print $output;
$base->printErrorMsg();
// __END__

View File

@@ -0,0 +1,225 @@
<?php
$DEBUG_ALL = 1;
$ECHO_ALL = 0;
$PRINT_ALL = 1;
// test file for qqFileUploader (HTML side)
// load the Basic class here
require 'config.php';
$base = new CoreLibs\Basic();
// set max upload size
$MAX_UPLOAD_SIZE = $base->StringByteFormat(ini_get('upload_max_filesize'));
$base->debug('UPLOADED FRONT', 'With max size: '.$MAX_UPLOAD_SIZE);
// very basic template output with super basic div for two file upload
?>
<html>
<head>
<title>File upload AJAX</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<style type="text/css">
.normal {
width: 25%;
}
.flx-s {
align-content: stretch;
display: flex;
flex: 1 100%;
}
.uploadError {
font-weight: bold;
color: red;
}
.uploadCancel {
font-weight: bold;
color: orange;
}
.qq-file-upload-button {
border: 1px solid #999999;
border-radius: 2px 2px 2px 2px;
box-shadow: 0 10px rgba(255, 255, 255, 0.3) inset, 0 10px rgba(255, 255, 255, 0.2) inset, 0 10px 2px rgba(255, 255, 255, 0.25) inset, 0 -1px 2px rgba(0, 0, 0, 0.3) inset;
text-align: center;
padding: 3px 5px 3px;
background-color: #cacaca;
margin: 2px;
}
.qq-file-upload-button:hover {
box-shadow: 0 10px 2px rgba(107, 107, 107, 0.2) inset, 0 12px rgba(107, 107, 107, 0.05) inset, 0 12px 2px rgba(107, 107, 107, 0.1) inset, 0 -1px 2px rgba(255, 255, 255, 0.3) inset;
}
.qq-file-upload-button:active {
border: 1px solid red;
background-color: rgba(80, 80, 80, 0.5);
}
.qq-upload-cancel {
border: 1px solid red;
border-radius: 2px;
text-align: center;
padding: 3px 5px 3px;
background-color: #eb652d;
margin: 2px;
}
.qq-upload-cancel:hover {
background-color: #eb8686;
}
.qq-upload-cancel:active {
border: 1px solid black;
background-color: #eb2d2d;
}
.progressBarOutside {
background-color: #f1f1f1;
color: black;
width: 100%;
}
.progressBarInside {
background-color: #1e9e84;
border-radius: 4px;
padding: 0.01em;
text-align: center;
font-size: 0.8em;
}
</style>
<script src="layout/default/javascript/prototype.js" type="text/javascript"></script>
<script src="layout/default/javascript/file-uploader/fileuploader.js" type="text/javascript"></script>
<script type="text/javascript">
function formatBytes(bytes)
{
var i = -1;
do {
bytes = bytes / 1024;
i++;
} while (bytes > 99);
// return Math.max(bytes, 0.1).toFixed(1) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
}
var MAX_UPLOAD_SIZE = <?=$MAX_UPLOAD_SIZE;?>;
// function to add an AJAX uploadeder to the set
function createUploaderSin(divName, divNumber) {
divID = divName + '_' + divNumber;
console.log('Div: %s, Number: %s => ID: %s', divName, divNumber, divID);
$(divID + '_Cancel').hide();
var uploader = new qq.FileUploaderBasic({
// element: document.getElementById(divID),
element: $(divID),
cancel: $(divID + '_Cancel'),
action: 'qq_file_upload_ajax.php',
multiple: false,
button: $(divID),
allowedExtensions: ['csv', 'zip', 'jpg', 'pdf', 'bz2'],
sizeLimit: MAX_UPLOAD_SIZE, // size set from php ini
name: divID,
params: {
'file_pos': divNumber, // we need to add here ID or something
'action': 'upload',
'task_uid': divNumber // -> test for some internal uid
},
onSubmit: function(id, filename, target) {
console.log('File upload: "%s", ID: "%s" => "%s"', filename, id, target);
// remove any assigned error classes and flags
if ($(target + '_ProgressText').hasClassName('uploadError') || $(target + '_ProgressText').hasClassName('uploadCancel')) {
$(target + '_ProgressText').className = '';
$(target + '_Error').value = 0;
}
$(target + '_ProgressText').innerHTML = 'Start uploading file: ' + filename;
$(target + '_Cancel').show();
// disabled stuff here
},
onProgress: function(id, filename, loaded, total, target) {
console.log('Progress for file: "%s", ID: "%s", loaded: "%s", total: "%s" => "%s"', id, filename, loaded, total, target);
var percent = Math.round((loaded / total) * 100);
$(target + '_ProgressBar').innerHTML = percent + '%';
$(target + '_ProgressBar').style.width = percent + '%';
$(target + '_ProgressText').innerHTML = 'Uploading: ' + filename + ', ' + formatBytes(loaded) + '/' + formatBytes(total);
},
onComplete: function(id, filename, responseJSON, target) {
console.log('File upload for file "%s", id "%s" done with status "%s" => "%s", And success: %s', filename, id, responseJSON, target, responseJSON.result.success);
if (responseJSON.result.success) {
$(target + '_ProgressBar').innerHTML = '100%';
$(target + '_ProgressBar').style.width = '100%';
$(target + '_ProgressText').innerHTML = 'Uploaded: ' + filename + ' (' + responseJSON.filesize_formated + ')';
// also write hidden vars for this (file name, etc)
// for that we replace the divName part from the target and get just the pos number ?
// $(target + 'Name').value = filename;
// $(target + 'NameUpload').value = responseJSON.filename;
// $(target + 'Type').value = responseJSON.type;
// $(target + 'Size').value = responseJSON.filesize;
} else {
// set the error class
$(target + '_ProgressText').className = 'uploadError';
// flag error
$(target + '_Error').value = 1;
// and write the error
$(target + '_ProgressText').innerHTML = 'UPLOAD FAILED FOR FILE: ' + filename;
}
// renable stuff here
$(target + '_Cancel').hide();
},
onCancel: function (id, filename, target) {
// cancel upload
console.log('File upload cancled for file "%s", id "%s"', filename, id);
// upload cancel
$(target + '_ProgressText').className = 'uploadCancel';
$(target + '_Error').value = 1;
$(target + '_ProgressText').innerHTML = 'UPLOAD CANCELED FOR FILE: ' + filename;
$(target + '_Cancel').hide();
},
/*showMessage: function(message) {
console.log('MESSAGE: %s', message);
}, */
debug: true
});
// console.log('INIT Nr %s => cnt: %s', divNumber, uploader);
return uploader;
}
</script>
</head>
<body>
<div id="masterGroup">
<div>File upload via AJAX (MAX SIZE: <?=$base->byteStringFormat($MAX_UPLOAD_SIZE);?>)</div>
<div class="flx-s">
<div id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_MF5tISORiay7" class="normal qq-file-upload-button" style="width: 20%">Upload File</div>
<div style="width: 5%">
<div id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_MF5tISORiay7_Cancel" class="qq-upload-cancel">X</div>
</div>
<div style="width: 75%; padding: 5px;">
<div id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_MF5tISORiay7_ProgressText"></div>
<div class="progressBarOutside">
<div class="progressBarInside" id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_MF5tISORiay7_ProgressBar" style="width: 0%">0%</div>
</div>
</div>
<input type="hidden" name="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_MF5tISORiay7_Error" id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_MF5tISORiay7_Error" value="">
</div>
<div class="flx-s">
<div id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_Ww9iWKrl3Xou" class="normal qq-file-upload-button" style="width: 20%">Upload File</div>
<div style="width: 5%">
<div id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_Ww9iWKrl3Xou_Cancel" class="qq-upload-cancel">X</div>
</div>
<div style="width: 75%; padding: 5px;">
<div id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_Ww9iWKrl3Xou_ProgressText"></div>
<div class="progressBarOutside">
<div class="progressBarInside" id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_Ww9iWKrl3Xou_ProgressBar" style="width: 0%">0%</div>
</div>
</div>
<input type="hidden" name="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_Ww9iWKrl3Xou_Error" id="Uploader_3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_Ww9iWKrl3Xou_Error" value="">
</div>
</div>
</body>
</html>
<script type="text/javascript">
// attach uploader to div areas
createUploaderSin('Uploader', '3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_MF5tISORiay7');
createUploaderSin('Uploader', '3WD7MAFmjAux_dlvvu13tezNj_XeSO0Ovauli0_Ww9iWKrl3Xou');
</script>
<?php
$base->printErrorMsg();
// __END__

View File

@@ -1,121 +0,0 @@
<?php
/********************************************************************
* AUTHOR: Clemens Schwaighofer
* CREATED: 2007/09/03
* SHORT DESCRIPTION:
* set paths & language variables
* HISTORY:
*********************************************************************/
// template path
if ($_SESSION['TEMPLATE']) {
$TEMPLATE = $_SESSION['TEMPLATE'];
} elseif ($LOCAL_TEMPLATE) {
$TEMPLATE = $LOCAL_TEMPLATE;
} else {
$TEMPLATE = DEFAULT_TEMPLATE;
}
$TEMPLATE_DIR = $TEMPLATE;
// master template
if (!$MASTER_TEMPLATE_NAME) {
$MASTER_TEMPLATE_NAME = MASTER_TEMPLATE_NAME;
}
// just emergency fallback for language
// set encoding
if ($_SESSION['DEFAULT_CHARSET']) {
$encoding = $_SESSION['DEFAULT_CHARSET'];
} elseif (!$encoding) {
$encoding = DEFAULT_ENCODING;
}
// just emergency fallback for language
if ($_SESSION['DEFAULT_LANG']) {
$lang = $_SESSION['DEFAULT_LANG'];
} elseif (!$lang) {
$lang = DEFAULT_LANG;
}
// create the char lang encoding
$lang_short = substr($lang, 0, 2);
// set include & template names
$CONTENT_INCLUDE = str_replace(".php", ".tpl", $cms->page_name);
$FORM_NAME = !isset($FORM_NAME) || !$FORM_NAME ? str_replace(".php", "", $cms->page_name) : $FORM_NAME;
// set local page title
$L_TITLE = ucfirst(str_replace('_', ' ', $cms->getPageName(1))).' - '.$G_TITLE;
// strip tpl and replace it with inc
// php include file per page
$cms->INC_TEMPLATE_NAME = str_replace(".tpl", ".inc", $CONTENT_INCLUDE);
// javascript include per page
$cms->JS_TEMPLATE_NAME = str_replace(".tpl", ".js", $CONTENT_INCLUDE);
// css per page
$cms->CSS_TEMPLATE_NAME = str_replace(".tpl", ".css", $CONTENT_INCLUDE);
// special CSS file
$cms->CSS_SPECIAL_TEMPLATE_NAME = @$CSS_NAME;
// special JS file
$cms->JS_SPECIAL_TEMPLATE_NAME = @$JS_NAME;
// set basic template path (tmp)
$smarty->setTemplateDir(LAYOUT.$TEMPLATE_DIR.TEMPLATES);
$cms->lang_dir = LAYOUT.$TEMPLATE_DIR.LANG;
$cms->includes = LAYOUT.$TEMPLATE_DIR.INCLUDES;
$cms->javascript = LAYOUT.$TEMPLATE_DIR.JS;
$cms->css = LAYOUT.$TEMPLATE_DIR.CSS;
$cms->pictures = LAYOUT.$TEMPLATE_DIR.IMAGES;
$cms->cache_pictures = LAYOUT.$TEMPLATE_DIR.CACHE.IMAGES;
$cms->cache_pictures_root = ROOT.$cms->cache_pictures;
if (!is_dir($cms->cache_pictures_root)) {
mkdir($cms->cache_pictures_root);
}
$template_set = $TEMPLATE;
// if we don't find the master template, set the template path back AND set the insert template as absolute path
if (!file_exists(ROOT.$smarty->getTemplateDir()[0].DS.MASTER_TEMPLATE_NAME)) {
if (file_exists(ROOT.$smarty->getTemplateDir()[0].DS.$TEMPLATE_NAME)) {
$TEMPLATE_NAME = ROOT.$smarty->getTemplateDir()[0].DS.$TEMPLATE_NAME;
}
$smarty->setTemplateDir(LAYOUT.DEFAULT_TEMPLATE.TEMPLATES);
$template_set = DEFAULT_TEMPLATE;
} elseif (!file_exists(ROOT.$smarty->getTemplateDir()[0].DS.$TEMPLATE_NAME)) {
// check if the template exists in the template path, if not, set path to to default
$smarty->setTemplateDir(LAYOUT.DEFAULT_TEMPLATE.TEMPLATES);
$template_set = DEFAULT_TEMPLATE;
}
// loop to check if dir exists
// check if file exists, if not reset to default path
// check if the javascript folder exists in the template path, if not fall back to default
if (!is_dir($cms->javascript)) {
$cms->javascript = LAYOUT.DEFAULT_TEMPLATE.JS;
}
// check if lang_dir folder exists in the template path, if not fall back to default
if (!is_dir($cms->lang_dir)) {
$cms->lang_dir = LAYOUT.DEFAULT_TEMPLATE.LANG;
}
// check if include folder exists in the template path, if not fall back to default
if (!is_dir($cms->includes)) {
$cms->includes = LAYOUT.DEFAULT_TEMPLATE.INCLUDES;
}
// check if css folder exists in the template path, if not fall back to default
if (!is_dir($cms->css)) {
$cms->css = LAYOUT.DEFAULT_TEMPLATE.CSS;
}
if (!is_dir($cms->pictures)) {
$cms->pictures = LAYOUT.DEFAULT_TEMPLATE.PICTURES;
}
if (!is_dir($cms->cache_pictures)) {
$cms->cache_pictures = LAYOUT.DEFAULT_TEMPLATE.CACHE.IMAGES;
}
// if the template_dir is != DEFAULT_TEMPLATE, then try to make a lang switch
// if the default lang is not like the lang given, switch lang
if (false === strstr(LAYOUT.DEFAULT_TEMPLATE.LANG, $cms->lang_dir) || strcasecmp(DEFAULT_LANG, $lang)) {
$cms->debug('LANG', 'Orig: '.LAYOUT.DEFAULT_TEMPLATE.LANG.', New: '.$cms->lang_dir.' | Orig Lang: '.DEFAULT_LANG.', New Lang: '.$lang);
$cms->l->l10nReloadMOfile($lang, $cms->lang_dir);
$smarty->l10n->l10nReloadMOfile($lang, $cms->lang_dir);
}
// $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']);
$cms->debug("TEMPLATE", "P: ".$smarty->getTemplateDir()[0]);
# __END__

View File

@@ -1,104 +0,0 @@
<?php
/********************************************************************
* AUTHOR: Clemens Schwaighofer
* CREATED: 2005/07/12
* SHORT DESCRIPTION:
* default smarty vars, and create output template for smarty
* HISTORY:
*********************************************************************/
// trigger flags
$cms->HEADER['USE_PROTOTYPE'] = USE_PROTOTYPE;
// scriptacolous, can only be used with prototype
if (USE_PROTOTYPE) {
$cms->HEADER['USE_SCRIPTACULOUS'] = USE_SCRIPTACULOUS;
}
// jquery and prototype should not be used together
$cms->HEADER['USE_JQUERY'] = USE_JQUERY; // don't use either of those two toger
// set basic template path (tmp)
// paths are set in the 'set_paths.inc' file
// 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'] = $EDIT_STYLESHEET;
$cms->HEADER['JAVASCRIPT'] = $EDIT_JAVASCRIPT;
// html title
$cms->HEADER['HTML_TITLE'] = (!isset($L_TITLE) || !$L_TITLE) ? $cms->l->__($G_TITLE) : $cms->l->__($L_TITLE);
$cms->DATA['table_width'] = $PAGE_WIDTH ? $PAGE_WIDTH : PAGE_WIDTH;
// messages = array('msg' =>, 'class' => 'error/warning/...')
$cms->DATA['messages'] = $cms->messages;
// top menu
$cms->DATA['nav_menu'] = $cms->adbTopMenu();
// the page name
$cms->DATA['page_name'] = $cms->page_name;
// user name
$cms->DATA['USER_NAME'] = $_SESSION['USER_NAME'];
// the template part to include into the body
$cms->DATA['TEMPLATE_NAME'] = $TEMPLATE_NAME;
$cms->DATA['CONTENT_INCLUDE'] = $CONTENT_INCLUDE;
// LANG
$cms->DATA['LANG'] = $lang;
$cms->DATA['TINYMCE_LANG'] = $lang_short;
// debug data, if DEBUG flag is on, this data is print out
$cms->DEBUG_DATA['debug_error_msg'] = $cms->runningTime();
$cms->DEBUG_DATA['DEBUG'] = @$DEBUG_TMPL;
// create main data array
$cms->CONTENT_DATA = array_merge($cms->HEADER, $cms->DATA, $cms->DEBUG_DATA);
// data is 1:1 mapping (all vars, values, etc)
foreach ($cms->CONTENT_DATA as $key => $value) {
$smarty->assign($key, $value);
}
if (is_dir(BASE.TEMPLATES_C)) {
$smarty->setCompileDir(BASE.TEMPLATES_C);
}
if (is_dir(BASE.CACHE)) {
$smarty->setCacheDir(BASE.CACHE);
}
$smarty->display($MASTER_TEMPLATE_NAME, $TEMPLATE.$lang, $TEMPLATE.$lang);
# __END__

59
www/admin/smarty_test.php Normal file → Executable file
View File

@@ -1,4 +1,4 @@
<?php
<?php declare(strict_types=1);
$ENABLE_ERROR_HANDLING = 0;
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
$DEBUG_ALL = 1;
@@ -7,14 +7,53 @@ $DB_DEBUG = 1;
$LOG_PER_RUN = 1;
define('USE_DATABASE', true);
require("header.inc");
$MASTER_TEMPLATE_NAME = 'main_body.tpl';
$TEMPLATE_NAME = 'smarty_test.tpl';
$PAGE_WIDTH = 750;
require("set_paths.inc");
define('USE_HEADER', true);
require 'config.php';
require BASE.INCLUDES.'admin_header.php';
if (is_object($smarty)) {
$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';
}
$smarty->PAGE_WIDTH = '100%';
// require BASE.INCLUDES.'admin_set_paths.php';
$smarty->setSmartyPaths();
// smarty test
$cms->DATA['SMARTY_TEST'] = 'Test Data';
// smarty test
$smarty->DATA['SMARTY_TEST'] = 'Test Data';
$smarty->DATA['TRANSLATE_TEST'] = $cms->l->__('Are we translated?');
}
require("smarty.inc");
require("footer.inc");
// drop down test with optgroups
$options = array (
'' => '選択してください',
'4/25(木)' => array (
'4/25(木) 11:00-11:50' => '4/25(木) 11:00-11:50',
'4/25(木) 12:20-13:00' => '4/25(木) 12:20-13:00'
),
'4/26(金)' => array (
'4/26(金) 11:00-11:50' => '4/26(金) 11:00-11:50',
'4/26(金) 12:20-13:00' => '4/26(金) 12:20-13:00'
),
'4/27(土)' => array (
'4/27(土) 11:00-11:50' => '4/27(土) 11:00-11:50',
'4/27(土) 12:20-13:00' => '4/27(土) 12:20-13:00'
)
);
if (is_object($smarty)) {
$smarty->DATA['drop_down_test'] = $options;
$smarty->DATA['loop_start'] = 2;
// require BASE.INCLUDES.'admin_smarty.php';
$smarty->setSmartyVarsAdmin();
}
require BASE.INCLUDES.'admin_footer.php';

View File

@@ -1,78 +0,0 @@
<?php
$edit_access = array (
"table_array" => array (
"edit_access_id" => array (
"value" => $GLOBALS["edit_access_id"],
"type" => "hidden",
"pk" => 1
),
"name" => array (
"value" => $GLOBALS["name"],
"output_name" => $this->l->__("Access Group Name"),
"mandatory" => 1,
"type" => "text",
"error_check" => "alphanumericspace|unique"
),
"description" => array (
"value" => $GLOBALS["description"],
"output_name" => $this->l->__("Description"),
"type" => "textarea"
),
"color" => array (
"value" => $GLOBALS["color"],
"output_name" => $this->l->__("Color"),
"mandatory" => 0,
"type" => "text",
"size" => 6,
"length" => 6,
"error_check" => "custom",
"error_regex" => "/[\dA-Fa-f]{6}/",
"error_example" => "F6A544"
)
),
"table_name" => "edit_access",
"load_query" => "SELECT edit_access_id, name FROM edit_access ORDER BY name",
"show_fields" => array (
array (
"name" => "name"
)
),
"element_list" => array (
"edit_access_data" => array (
"output_name" => "Edit Access Data",
"type" => "reference_data", # is not a sub table read and connect, but only a sub table with data
"max_empty" => 5, # maxium visible if no data is set, if filled add this number to visible
"prefix" => "ead",
"elements" => array (
"edit_access_data_id" => array (
"output_name" => "Activate",
"type" => "hidden",
"int" => 1,
"pk_id" => 1
),
"name" => array (
"type" => "text",
"error_check" => "alphanumeric|unique",
"output_name" => "Name"
),
"value" => array (
"type" => "text",
"output_name" => "Value"
),
"enabled" => array (
"type" => "checkbox",
"output_name" => "Activate",
"int" => 1,
"element_list" => array(1)
),
"edit_access_id" => array (
"int" => 1,
"type" => "hidden",
"fk_id" => 1 # reference main key from master table above
)
)
)
)
);
# __END__

View File

@@ -1,101 +0,0 @@
<?php
$edit_groups = array (
"table_array" => array (
"edit_group_id" => array (
"value" => $GLOBALS["edit_group_id"],
"pk" => 1,
"type" => "hidden"
),
"enabled" => array (
"value" => $GLOBALS["enabled"],
"output_name" => "Enabled",
"int" => 1,
"type" => "binary",
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"name" => array (
"value" => $GLOBALS["name"],
"output_name" => "Group Name",
"type" => "text",
"mandatory" => 1
),
"edit_access_right_id" => array (
"value" => $GLOBALS["edit_access_right_id"],
"output_name" => "Group Level",
"mandatory" => 1,
"int" => 1,
"type" => "drop_down_db",
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
),
"edit_scheme_id" => array (
"value" => $GLOBALS["edit_scheme_id"],
"output_name" => "Group Scheme",
"int_null" => 1,
"type" => "drop_down_db",
"query" => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
)
),
"load_query" => "SELECT edit_group_id, name, enabled FROM edit_group ORDER BY name",
"table_name" => "edit_group",
"show_fields" => array (
array (
"name" => "name"
),
array (
"name" => "enabled",
"binary" => array ("Yes", "No"),
"before_value" => "Enabled: "
)
),
"element_list" => array (
"edit_page_access" => array (
"output_name" => "Pages",
"mandatory" => 1,
"delete" => 0, // set then reference entries are deleted, else the "enable" flag is only set
"enable_name" => "enable_page_access",
"prefix" => "epa",
"read_data" => array (
"table_name" => "edit_page",
"pk_id" => "edit_page_id",
"name" => "name",
"order" => "order_number"
),
"elements" => array (
"edit_page_access_id" => array (
"output_name" => "Activate",
"type" => "hidden",
"int" => 1,
"pk_id" => 1
),
"enabled" => array (
"type" => "checkbox",
"output_name" => "Activate",
"int" => 1,
"element_list" => array(1)
),
"edit_access_right_id" => array (
"type" => "drop_down_db",
"output_name" => "Access Level",
"int" => 1,
"preset" => 1, // first of the select
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
),
"edit_page_id" => array (
"int" => 1,
"type" => "hidden"
)
/*,
"edit_default" => array (
"output_name" => "Default",
"type" => "radio",
"mandatory" => 1
)*/
)
) // edit pages ggroup
)
);
# __END__

View File

@@ -1,74 +0,0 @@
<?php
$edit_languages=array (
"table_array" => array (
"edit_language_id" => array (
"value" => $GLOBALS["edit_language_id"],
"type" => "hidden",
"pk" => 1
),
"short_name" => array (
"value" => $GLOBALS["short_name"],
"output_name" => "Language (short)",
"mandatory" => 1,
"type" => "text",
"size" => 2,
"length" => 2
),
"long_name" => array (
"value" => $GLOBALS["long_name"],
"output_name" => "Language (long)",
"mandatory" => 1,
"type" => "text",
"size" => 40
),
"iso_name" => array (
"value" => $GLOBALS["iso_name"],
"output_name" => "ISO Code",
"mandatory" => 1,
"type" => "text"
),
"order_number" => array (
"value" => $GLOBALS["order_number"],
"int" => 1,
"order" => 1
),
"enabled" => array (
"value" => $GLOBALS["enabled"],
"output_name" => "Enabled",
"int" => 1,
"type" => "binary",
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"lang_default" => array (
"value" => $GLOBALS["lang_default"],
"output_name" => "Default Language",
"int" => 1,
"type" => "binary",
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
)
),
"load_query" => "SELECT edit_language_id, long_name, iso_name, enabled FROM edit_language ORDER BY long_name",
"show_fields" => array (
array (
"name" => "long_name"
),
array (
"name" => "iso_name",
"before_value" => "ISO: "
),
array (
"name" => "enabled",
"before_value" => "Enabled: ",
"binary" => array ("Yes","No")
)
),
"table_name" => "edit_language"
);
# __END__

View File

@@ -1,39 +0,0 @@
<?php
$edit_menu_group = array (
"table_array" => array (
"edit_menu_group_id" => array (
"value" => $GLOBALS["edit_menu_group_id"],
"type" => "hidden",
"pk" => 1
),
"name" => array (
"value" => $GLOBALS["name"],
"output_name" => $this->l->__("Group name"),
"mandatory" => 1,
"type" => "text"
),
"flag" => array (
"value" => $GLOBALS["flag"],
"output_name" => $this->l->__("Flag"),
"mandatory" => 1,
"type" => "text",
"error_check" => "alphanumeric|unique"
),
"order_number" => array (
"value" => $GLOBALS["order_number"],
"output_name" => "Group order",
"type" => "order",
"int" => 1,
"order" => 1
)
),
"table_name" => "edit_menu_group",
"load_query" => "SELECT edit_menu_group_id, name FROM edit_menu_group ORDER BY name",
"show_fields" => array (
array (
"name" => "name"
)
)
);
# __END__

View File

@@ -1,179 +0,0 @@
<?php
$edit_pages = array (
"table_array" => array (
"edit_page_id" => array (
"value" => $GLOBALS["edit_page_id"],
"type" => "hidden",
"pk" => 1
),
"filename" => array (
"value" => $GLOBALS["filename"],
"output_name" => "Add File ...",
"mandatory" => 1,
"type" => "drop_down_db",
"query" => "SELECT DISTINCT temp_files.filename AS id, temp_files.filename AS name FROM temp_files LEFT JOIN edit_page ep ON temp_files.filename = ep.filename WHERE ep.filename IS NULL"
),
"name" => array (
"value" => $GLOBALS["name"],
"output_name" => "Page name",
"mandatory" => 1,
"type" => "text"
),
"order_number" => array (
"value" => $GLOBALS["order_number"],
"output_name" => "Page order",
"type" => "order",
"int" => 1,
"order" => 1
),
/* "flag" => array (
"value" => $GLOBALS["flag"],
"output_name" => "Page Flag",
"type" => "drop_down_array",
"query" => array (
"0" => "0",
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5"
)
),*/
"online" => array (
"value" => $GLOBALS["online"],
"output_name" => "Online",
"int" => 1,
"type" => "binary",
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"menu" => array (
"value" => $GLOBALS["menu"],
"output_name" => "Menu",
"int" => 1,
"type" => "binary",
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"popup" => array (
"value" => $GLOBALS["popup"],
"output_name" => "Popup",
"int" => 1,
"type" => "binary",
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"popup_x" => array (
"value" => $GLOBALS["popup_x"],
"output_name" => "Popup Width",
"int_null" => 1,
"type" => "text",
"size" => 4,
"length" => 4
),
"popup_y" => array (
"value" => $GLOBALS["popup_y"],
"output_name" => "Popup Height",
"int_null" => 1,
"type" => "text",
"size" => 4,
"length" => 4
)/*,
"query_string" => array (
"value" => $GLOBALS["query_string"],
"output_name" => "Query String for Link",
"type" => "text",
"size" => "50"
)*/
),
"load_query" => "SELECT edit_page_id, filename, name, online, menu, popup FROM edit_page ORDER BY order_number",
"table_name" => "edit_page",
"show_fields" => array (
array (
"name" => "name"
),
array (
"name" => "filename",
"before_value" => "Filename: "
),
array (
"name" => "online",
"binary" => array ("Yes","No"),
"before_value" => "Online: "
),
array (
"name" => "menu",
"binary" => array ("Yes","No"),
"before_value" => "Menu: "
),
array (
"name" => "popup",
"binary" => array ("Yes","No"),
"before_value" => "Popup: "
)
),
"reference_arrays" => array (
"edit_visible_group" => array (
"table_name" => "edit_page_visible_group",
"other_table_pk" => "edit_visible_group_id",
"output_name" => "Visible Groups (access)",
"mandatory" => 1,
"select_size" => 10,
"selected" => $GLOBALS["edit_visible_group_id"],
"query" => 'SELECT edit_visible_group_id, \'Name: \' || name || \', \' || \'Flag: \' || flag FROM edit_visible_group ORDER BY name'
),
"edit_menu_group" => array (
"table_name" => "edit_page_menu_group",
"other_table_pk" => "edit_menu_group_id",
"output_name" => "Menu Groups (grouping)",
"mandatory" => 1,
"select_size" => 10,
"selected" => $GLOBALS["edit_menu_group_id"],
"query" => 'SELECT edit_menu_group_id, \'Name: \' || name || \', \' || \'Flag: \' || flag FROM edit_menu_group ORDER BY order_number'
)
),
"element_list" => array (
"edit_query_string" => array (
"output_name" => "Query Strings",
"delete_name" => "remove_query_string",
"prefix" => "eqs",
"elements" => array (
"name" => array (
"output_name" => "Name",
"type" => "text",
"error_check" => "unique|alphanumeric",
"mandatory" => 1
),
"value" => array (
"output_name" => "Value",
"type" => "text"
),
"enabled" => array (
"output_name" => "Enabled",
"int" => 1,
"type" => "checkbox",
"element_list" => array (1)
),
"dynamic" => array (
"output_name" => "Dynamic",
"int" => 1,
"type" => "checkbox",
"element_list" => array (1)
),
"edit_query_string_id" => array (
"type" => "hidden",
"pk_id" => 1
)
) // elements
) // query_string element list
) // element list
);
# __END__

View File

@@ -1,56 +0,0 @@
<?php
$edit_schemes = array (
"table_array" => array (
"edit_scheme_id" => array (
"value" => $GLOBALS["edit_scheme_id"],
"type" => "hidden",
"pk" => 1
),
"name" => array (
"value" => $GLOBALS["name"],
"output_name" => "Scheme Name",
"mandatory" => 1,
"type" => "text"
),
"header_color" => array (
"value" => $GLOBALS["header_color"],
"output_name" => "Header Color",
"mandatory" => 1,
"type" => "text",
"size" => 6,
"length" => 6,
"error_check" => "custom",
"error_regex" => "/[\dA-Fa-f]{6}/",
"error_example" => "F6A544"
),
"enabled" => array (
"value" => $GLOBALS["enabled"],
"output_name" => "Enabled",
"int" => 1,
"type" => "binary",
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"template" => array (
"value" => $GLOBALS["template"],
"output_name" => "Template",
"type" => "text"
)
),
"table_name" => "edit_scheme",
"load_query" => "SELECT edit_scheme_id, name, enabled FROM edit_scheme ORDER BY name",
"show_fields" => array (
array (
"name" => "name"
),
array (
"name" => "enabled",
"binary" => array ("Yes", "No"),
"before_value" => "Enabled: "
)
)
); // main array
# __END__

View File

@@ -1,255 +0,0 @@
<?php
$edit_users = array (
"table_array" => array (
"edit_user_id" => array (
"value" => $GLOBALS["edit_user_id"],
"type" => "hidden",
"pk" => 1,
"int" => 1
),
"username" => array (
"value" => $GLOBALS["username"],
"output_name" => "Username",
"mandatory" => 1,
"error_check" => "unique|alphanumericextended",
"type" => "text"
),
"password" => array (
"value" => $GLOBALS["password"],
"HIDDEN_value" => $GLOBALS["HIDDEN_password"],
"CONFIRM_value" => $GLOBALS["CONFIRM_password"],
"output_name" => "Password",
"mandatory" => 1,
"type" => "password", // later has to be password for encryption in database
'update' => array ( // connected field updates, and update data
'password_change_date' => array ( // db row to update
'type' => 'date', // type of field (int/text/date/etc)
'value' => 'NOW()' // value [todo: complex reference
)
)
),
// password date when first insert and password is set, needs special field with connection to password
'password_change_interval' => array (
'value' => $GLOBALS['password_change_interval'],
'output_name' => 'Password change interval',
'error_check' => 'intervalshort', // can be any date length format. n Y/M/D [not H/M/S], only one set, no combination
'type' => 'text',
'interval' => 1, // interval needs NULL write for empty
'size' => 5, // make it 5 chars long
'length' => 5
),
// password reset force interval, if set, user needs to reset password after X time period
"enabled" => array (
"value" => $GLOBALS["enabled"],
"output_name" => "Enabled",
"type" => "binary",
"int" => 1,
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"strict" => array (
"value" => $GLOBALS["strict"],
"output_name" => "Strict (Lock after errors)",
"type" => "binary",
"int" => 1,
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"locked" => array (
"value" => $GLOBALS["locked"],
"output_name" => "Locked (auto set if strict with errors)",
"type" => "binary",
"int" => 1,
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"admin" => array (
"value" => $GLOBALS["admin"],
"output_name" => "Admin",
"type" => "binary",
"int" => 1,
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"debug" => array (
"value" => $GLOBALS["debug"],
"output_name" => "Debug",
"type" => "binary",
"int" => 1,
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"db_debug" => array (
"value" => $GLOBALS["db_debug"],
"output_name" => "DB Debug",
"type" => "binary",
"int" => 1,
"element_list" => array (
"1" => "Yes",
"0" => "No"
)
),
"email" => array (
"value" => $GLOBALS["email"],
"output_name" => "E-Mail",
"type" => "text"
),
"last_name" => array (
"value" => $GLOBALS["last_name"],
"output_name" => "Last Name",
"type" => "text"
),
"first_name" => array (
"value" => $GLOBALS["first_name"],
"output_name" => "First Name",
"type" => "text"
),
"edit_language_id" => array (
"value" => $GLOBALS["edit_language_id"],
"output_name" => "Language",
"mandatory" => 1,
"int" => 1,
"type" => "drop_down_db",
"query" => "SELECT edit_language_id, long_name FROM edit_language WHERE enabled = 1 ORDER BY order_number"
),
"edit_scheme_id" => array (
"value" => $GLOBALS["edit_scheme_id"],
"output_name" => "Scheme",
"int_null" => 1,
"type" => "drop_down_db",
"query" => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
),
"edit_group_id" => array (
"value" => $GLOBALS["edit_group_id"],
"output_name" => "Group",
"int" => 1,
"type" => "drop_down_db",
"query" => "SELECT edit_group_id, name FROM edit_group WHERE enabled = 1 ORDER BY name",
"mandatory" => 1
),
"edit_access_right_id" => array (
"value" => $GLOBALS["edit_access_right_id"],
"output_name" => "User Level",
"mandatory" => 1,
"int" => 1,
"type" => "drop_down_db",
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
),
"login_error_count" => array (
"output_name" => "Login error count",
"value" => $GLOBALS['login_error_count'],
"type" => "view",
"empty" => "0"
),
"login_error_date_last" => array (
"output_name" => "Last login error",
"value" => $GLOBALS['login_error_date_liast'],
"type" => "view",
"empty" => "-"
),
"login_error_date_first" => array (
"output_name" => "First login error",
"value" => $GLOBALS['login_error_date_first'],
"type" => "view",
"empty" => "-"
),
// planned delete lock flag
"protected" => array (
"value" => $GLOBALS["protected"],
"int" => 1
)
),
"load_query" => "SELECT edit_user_id, username, enabled, debug, db_debug, strict, locked, login_error_count FROM edit_user ORDER BY username",
"table_name" => "edit_user",
"show_fields" => array (
array (
"name" => "username"
),
array (
"name" => "enabled",
"binary" => array ("Yes", "No"),
"before_value" => "Enabled: "
),
array (
"name" => "debug",
"binary" => array ("Yes", "No"),
"before_value" => "Debug: "
),
array (
"name" => "db_debug",
"binary" => array ("Yes", "No"),
"before_value" => "DB Debug: "
),
array (
"name" => "strict",
"binary" => array ("Yes", "No"),
"before_value" => "Strict: "
),
array (
"name" => "locked",
"binary" => array ("Yes", "No"),
"before_value" => "Locked: "
),
array (
"name" => "login_error_count",
"before_value" => "Errors: "
)
),
"element_list" => array (
"edit_access_user" => array (
"output_name" => "Accounts",
"mandatory" => 1,
"delete" => 0, // set then reference entries are deleted, else the "enable" flag is only set
"prefix" => "ecu",
"read_data" => array (
"table_name" => "edit_access",
"pk_id" => "edit_access_id",
"name" => "name",
"order" => "name"
),
"elements" => array (
"edit_access_user_id" => array (
"output_name" => "Activate",
"type" => "hidden",
"int" => 1,
"pk_id" => 1
),
"enabled" => array (
"type" => "checkbox",
"output_name" => "Activate",
"int" => 1,
"element_list" => array (1)
),
"edit_access_right_id" => array (
"type" => "drop_down_db",
"output_name" => "Access Level",
"preset" => 1, // first of the select
"int" => 1,
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
),
"edit_default" => array (
"type" => "radio_group",
"output_name" => "Default",
"int" => 1,
"element_list" => "radio_group"
),
"edit_access_id" => array (
"type" => "hidden",
"int" => 1
)
)
) // edit pages ggroup
)
);
# __END__

View File

@@ -1,32 +0,0 @@
<?php
$edit_visible_group = array (
"table_array" => array (
"edit_visible_group_id" => array (
"value" => $GLOBALS["edit_visible_group_id"],
"type" => "hidden",
"pk" => 1
),
"name" => array (
"value" => $GLOBALS["name"],
"output_name" => $this->l->__("Group name"),
"mandatory" => 1,
"type" => "text"
),
"flag" => array (
"value" => $GLOBALS["flag"],
"output_name" => $this->l->__("Flag"),
"mandatory" => 1,
"type" => "text",
"error_check" => "alphanumeric|unique"
)
),
"table_name" => "edit_visible_group",
"load_query" => "SELECT edit_visible_group_id, name FROM edit_visible_group ORDER BY name",
"show_fields" => array (
array (
"name" => "name"
)
)
);
# __END__

Some files were not shown because too many files have changed in this diff Show More