Constants.php 55.1 KB
Newer Older
1
2
3
4
5
6
7
8
<?php
/**
 * Created by PhpStorm.
 * User: crose
 * Date: 1/1/16
 * Time: 8:35 PM
 */

9
const EXT_KEY = 'qfq';
10
const CONFIG_INI = "config.qfq.ini";  // QFQ configuration file: db access
Carsten  Rose's avatar
Carsten Rose committed
11

12
const GFX_INFO = 'typo3conf/ext/qfq/Resources/Public/icons/note.gif';
13
const API_DIR = 'typo3conf/ext/qfq/qfq/api';
14

Carsten  Rose's avatar
Carsten Rose committed
15
const QFQ_LOG = 'qfq.log';
16
17
const QFQ_TEMP_FILE_PATTERN = 'qfq.split.XXXXX';
const QFQ_TEMP_SOURCE = '.temp.source';
Carsten  Rose's avatar
Carsten Rose committed
18

19
20
const MAX_LENGTH_IPV6 = 45;

21
const SESSION_LIFETIME_SECONDS = 86400;
22
const SESSION_NAME = 'qfq';
23
24
25
const SESSION_FE_USER_UID = 'feUserUid';
const SESSION_FE_USER = 'feUser';
const SESSION_FE_USER_GROUP = 'feUserGroup';
26

Carsten  Rose's avatar
Carsten Rose committed
27
28
const TABLE_NAME_FORM = 'Form';
const TABLE_NAME_FORM_ELEMENT = 'FormElement';
29
const TABLE_NAME_SPLIT = 'Split';
Carsten  Rose's avatar
Carsten Rose committed
30

31
32
const FORM_LOAD = 'form_load';
const FORM_SAVE = 'form_save';
Carsten  Rose's avatar
Carsten Rose committed
33
const FORM_UPDATE = 'form_update';
34
const FORM_DELETE = 'form_delete';
35
36
37
38
39
const FORM_PERMISSION_SIP = 'sip';
const FORM_PERMISSION_LOGGED_IN = 'logged_id';
const FORM_PERMISSION_LOGGED_OUT = 'logged_out';
const FORM_PERMISSION_ALWAYS = 'always';
const FORM_PERMISSION_NEVER = 'never';
40
41
const FORM_BUTTON_NEW = 'new';
const FORM_BUTTON_DELETE = 'delete';
42
43
const FORM_BUTTON_CLOSE = 'close';
const FORM_BUTTON_SAVE = 'save';
44

45
46
const F_BS_COLUMNS = 'bsColumns';

47
48
49
50
const F_BS_LABEL_COLUMNS = 'bsLabelColumns';
const F_BS_INPUT_COLUMNS = 'bsInputColumns';
const F_BS_NOTE_COLUMNS = 'bsNoteColumns';

51
52
const RETURN_URL = 'return_url';
const RETURN_SIP = 'return_sip';
53
const RETURN_ARRAY = 'return_array';
54

55
const SQL_FORM_ELEMENT_RAW = "SELECT * FROM FormElement AS fe WHERE fe.formId = ? AND fe.deleted = 'no' AND fe.enabled='yes' ORDER BY fe.ord, fe.id";
Carsten  Rose's avatar
Carsten Rose committed
56
57
const SQL_FORM_ELEMENT_SPECIFIC_CONTAINER = "SELECT *, ? AS 'nestedInFieldSet' FROM FormElement AS fe WHERE fe.formId = ? AND fe.deleted = 'no' AND FIND_IN_SET(fe.class, ? ) AND fe.feIdContainer = ? AND fe.enabled='yes' ORDER BY fe.ord, fe.id";
const SQL_FORM_ELEMENT_ALL_CONTAINER = "SELECT *, ? AS 'nestedInFieldSet' FROM FormElement AS fe WHERE fe.formId = ? AND fe.deleted = 'no' AND FIND_IN_SET(fe.class, ? ) AND fe.enabled='yes' ORDER BY fe.ord, fe.id";
58
const SQL_FORM_ELEMENT_SIMPLE_ALL_CONTAINER = "SELECT fe.id, fe.feIdContainer, fe.name, fe.label, fe.type, fe.encode, fe.checkType, fe.checkPattern, fe.mode, fe.modeSql, fe.parameter, fe.dynamicUpdate FROM FormElement AS fe, Form AS f WHERE f.name = ? AND f.id = fe.formId AND fe.deleted = 'no' AND fe.class = 'native' AND fe.enabled='yes' ORDER BY fe.ord, fe.id";
Carsten  Rose's avatar
Carsten Rose committed
59
const SQL_FORM_ELEMENT_CONTAINER_TEMPLATE_GROUP = "SELECT fe.id, fe.name, fe.label, fe.maxLength, fe.parameter FROM FormElement AS fe, Form AS f WHERE f.name = ? AND f.id = fe.formId AND fe.deleted = 'no' AND fe.class = 'container' AND fe.type='templateGroup' AND fe.enabled='yes' ORDER BY fe.ord, fe.id";
60
const SQL_FORM_ELEMENT_TEMPLATE_GROUP_FE_ID = "SELECT * FROM FormElement AS fe WHERE fe.id = ? AND fe.deleted = 'no' AND fe.class = 'container' AND fe.type='templateGroup' AND fe.enabled='yes' ";
61
62
//const SQL_FORM_ELEMENT_NATIVE_TG_COUNT = "SELECT fe.*, IFNULL(feTg.maxLength,0) AS _tgCopies FROM FormElement AS fe LEFT JOIN FormElement AS feTg ON fe.feIdContainer=feTg.id AND feTg.deleted = 'no' AND feTg.class = 'container' AND feTg.type='templateGroup' AND feTg.enabled='yes' WHERE fe.formId = ? AND fe.deleted = 'no' AND fe.class = 'native' AND fe.enabled='yes'";
const SQL_FORM_ELEMENT_NATIVE_TG_COUNT = "SELECT fe.*, IFNULL(feTg.maxLength,0) AS _tgCopies FROM FormElement AS fe LEFT JOIN FormElement AS feTg ON fe.feIdContainer=feTg.id AND feTg.deleted = 'no' AND feTg.class = 'container' AND feTg.type='templateGroup' AND feTg.enabled='yes' WHERE fe.formId = ? AND fe.deleted = 'no' AND (fe.class = 'native' OR (fe.class = 'container' AND fe.type='pill')) AND fe.enabled='yes'";
63

Carsten  Rose's avatar
Carsten Rose committed
64
const NAME_TG_COPIES = '_tgCopies';  // Number of templatesGroup copies to create on the fly. Also used in SQL_FORM_ELEMENT_NATIVE_TG_COUNT.
65
const FE_TG_INDEX = '_tgIndex'; // Index of the current copy of a templateGroup FE.
66

Carsten  Rose's avatar
Carsten Rose committed
67
// SANITIZE Classifier
68
const SANITIZE_ALLOW_AUTO = "auto"; // Default for FormElements
Carsten  Rose's avatar
Carsten Rose committed
69
70
const SANITIZE_ALLOW_ALNUMX = "alnumx";
const SANITIZE_ALLOW_DIGIT = "digit";
71
const SANITIZE_ALLOW_NUMERICAL = "numerical";
72
const SANITIZE_ALLOW_EMAIL = "email";
73
const SANITIZE_ALLOW_PATTERN = "pattern";
Carsten  Rose's avatar
Carsten Rose committed
74
const SANITIZE_ALLOW_ALLBUT = "allbut";
Carsten  Rose's avatar
Carsten Rose committed
75
const SANITIZE_ALLOW_ALL = "all";
76
const SANITIZE_DEFAULT = SANITIZE_ALLOW_DIGIT; // for {{variable}} expressions without checkType
77

78
79
const SANITIZE_EXCEPTION = 'exception';
const SANITIZE_EMPTY_STRING = 'empty string';
80

81
82
const SANITIZE_VIOLATE = '!!';

83
84
85
86
87
88
// Index wrap setup table
const WRAP_SETUP_TITLE = 'title';
const WRAP_SETUP_ELEMENT = 'element';
const WRAP_SETUP_LABEL = 'label';
const WRAP_SETUP_INPUT = 'input';
const WRAP_SETUP_NOTE = 'note';
89
const WRAP_SETUP_SUBRECORD = 'subrecord';
90
const WRAP_SETUP_IN_FIELDSET = 'inFieldset';
91
const WRAP_SETUP_IN_TEMPLATE_GROUP = 'inTemplateGroup';
92
const WRAP_SETUP_START = 'start';
93
const WRAP_SETUP_CLASS = 'class';
94
95
const WRAP_SETUP_END = 'end';

96
97
98
// dbQuerySimple
const ROW_REGULAR = "regular";
const ROW_IMPLODE_ALL = "implode_all";
99
100
101
102
const ROW_EXPECT_0 = "expect_0";
const ROW_EXPECT_1 = "expect_1";
const ROW_EXPECT_0_1 = "expect_0_1";
const ROW_EXPECT_GE_1 = "expect_ge_1";
103
const ROW_KEYS = "keys";
104

105
// KeyValueParser
106
107
const KVP_IF_VALUE_EMPTY_COPY_KEY = 'if_value_empty_copy_key';
const KVP_VALUE_GIVEN = 'value_given';
108

109
110
// https://lib2.colostate.edu/wildlife/atoz.php?letter=ALL

111
// QFQ Error Codes
Carsten  Rose's avatar
Carsten Rose committed
112
const ERROR_UNKNOW_SANITIZE_CLASS = 1001;
113

114
const ERROR_CODE_SHOULD_NOT_HAPPEN = 1003;
115
116
const ERROR_SIP_MALFORMED = 1005;
const ERROR_SIP_INVALID = 1006;
117
const ERROR_MISSING_RECORD_ID = 1007;
118
const ERROR_IN_SQL_STATEMENT = 1008;
119
const ERROR_MISSING_REQUIRED_PARAMETER = 1009;
120
const ERROR_FE_NESTED_TOO_MUCH = 1010;
121
122
123
124
125
const ERROR_BROKEN_PARAMETER = 1011;
const ERROR_FE_USER_UID_CHANGED = 1012;
const ERROR_SIP_NOT_FOUND = 1013;
const ERROR_SIP_NOT_ALLOWED_AS_PARAM = 1014;
const ERROR_SIP_NEEDED_FOR_THIS_FORM = 1015;
Carsten  Rose's avatar
Carsten Rose committed
126
127
128
129
const ERROR_SIP_EXIST_BUT_OTHER_PARAM_GIVEN_BY_CLIENT = 1016;
const ERROR_USER_NOT_LOGGED_IN = 1017;
const ERROR_USER_LOGGED_IN = 1018;
const ERROR_FORM_FORBIDDEN = 1019;
130
const ERROR_FORM_UNKNOWN_PERMISSION_MODE = 1020;
Carsten  Rose's avatar
Carsten Rose committed
131
const ERROR_MULTI_SQL_MISSING = 1021;
132

Carsten  Rose's avatar
Carsten Rose committed
133
const ERROR_RECURSION_TOO_DEEP = 1023;
134
const ERROR_CHECKBOXMODE_UNKNOWN = 1024;
135
const ERROR_MISSING_SQL1 = 1025;
136
const ERROR_CHECKBOX_EQUAL = 1026;
137
const ERROR_MISSING_ITEM_LIST = 1027;
138
const ERROR_UNKNOWN_FORM_RENDER = 1028;
Carsten  Rose's avatar
Carsten Rose committed
139
const ERROR_NAME_LABEL_EMPTY = 1029;
140

Carsten  Rose's avatar
Carsten Rose committed
141
const ERROR_DEBUG = 1031;
142
143
144
const ERROR_UNKNOWN_MODE = 1032;
const ERROR_NOT_IMPLEMENTED = 1033;
const ERROR_RESERVED_KEY_NAME = 1034;
145

146
const ERROR_UNKNOWN_FORWARD_MODE = 1036;
147

Carsten  Rose's avatar
Carsten Rose committed
148
const ERROR_MISSING_HIDDEN_FIELD_IN_SIP = 1038;
149

Carsten  Rose's avatar
Carsten Rose committed
150
151
152
153
154
155
156
const ERROR_UNKNOWN_CHECKTYPE = 1042;
const ERROR_PATTERN_VIOLATION = 1043;
const ERROR_RECORDID_0_FORBIDDEN = 1044;
const ERROR_LOG_NOT_WRITABLE = 1045;
const ERROR_UNNOWN_STORE = 1046;
const ERROR_GET_STORE_ZERO = 1047;
const ERROR_SET_STORE_ZERO = 1048;
157
const ERROR_INVALID_OR_MISSING_PARAMETER = 1050;
158
const ERROR_UNKNOWN_SQL_LOG_MODE = 1051;
Carsten  Rose's avatar
Carsten Rose committed
159
const ERROR_FORM_NOT_FOUND = 1052;
160
const ERROR_DATE_TIME_FORMAT_NOT_RECOGNISED = 1053;
161
const ERROR_SANATIZE_INVALID_VALUE = 1054;
162
const ERROR_REQUIRED_VALUE_EMPTY = 1055;
163
const ERROR_DATE_UNEXPECTED_FORMAT = 1056;
164
const ERROR_UNEXPECTED_TYPE = 1057;
165
const ERROR_NOT_APPLICABLE = 1058;
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
const ERROR_FORMELEMENT_TYPE = 1059;
const ERROR_MISSING_OPEN_DELIMITER = 1060;
const ERROR_MISSING_CLOSE_DELIMITER = 1061;
const ERROR_EXPECTED_ARRAY = 1062;
const ERROR_REPORT_FAILED_ACTION = 1063;
const ERROR_MISSING_MESSAGE_FAIL = 1064;
const ERROR_MISSING_TABLE_NAME = 1065;
const ERROR_MISSING_TABLE = 1066;
const ERROR_RECORD_NOT_FOUND = 1067;
const ERROR_INVALID_EDITOR_PROPERTY_NAME = 1068;
const ERROR_UNKNOWN_ESCAPE_MODE = 1069;
const ERROR_MISSING_CONFIG_INI_VALUE = 1070;
const ERROR_SENDMAIL = 1071;
const ERROR_SENDMAIL_MISSING_VALUE = 1072;
const ERROR_OVERWRITE_RECORD_ID = 1073;
181
const ERROR_MISSING_SLAVE_ID_DEFINITION = 1074;
182
const ERROR_MISSING_INTL = 1075;
183
const ERROR_HTML_TOKEN_TOO_SHORT = 1076;
184
const ERROR_MISSING_PRINTF_ARGUMENTS = 1077;
185
const ERROR_MISSING_DEFINITON = 1078;
186
const ERROR_QFQ_VERSION = 1079;
Carsten  Rose's avatar
Carsten Rose committed
187
const ERROR_PLAY_SQL_FILE = 1080;
188
const ERROR_MISSING_FILE_NAME = 1081;
189
const ERROR_MAX_FILE_SIZE_TOO_BIG = 1082;
Elias Villiger's avatar
Elias Villiger committed
190
const ERROR_SMALLER_THAN_MIN = 1083;
Elias Villiger's avatar
Elias Villiger committed
191
const ERROR_LARGER_THAN_MAX = 1084;
192
const ERROR_INVALID_DECIMAL_FORMAT = 1085;
193
const ERROR_INVALID_DATE = 1086;
194

195
// Subrecord
196
const ERROR_SUBRECORD_MISSING_COLUMN_ID = 1100;
197
const ERROR_SUBRECORD_DETAIL_COLUMN_NOT_FOUND = 'Column not found in primary record or current row';
198
// Store
199
200
const ERROR_STORE_VALUE_ALREADY_CODPIED = 1200;
const ERROR_STORE_KEY_EXIST = 1201;
201

202
// I/O Error
203
204
205
206
207
208
209
210
211
const ERROR_IO_READ_FILE = 1300;
const ERROR_IO_WRITE = 1303;
const ERROR_IO_OPEN = 1304;
const ERROR_IO_UNLINK = 1305;
const ERROR_IO_FILE_EXIST = 1306;
const ERROR_IO_RENAME = 1307;
const ERROR_IO_INVALID_LINK = 1308;
const ERROR_IO_DIR_EXIST_AS_FILE = 1309;
const ERROR_IO_CHDIR = 1310;
212
const ERROR_IO_CREATE_FILE = 1311;
Carsten  Rose's avatar
Carsten Rose committed
213
const ERROR_IO_COPY_FILE = 1312;
214
const ERROR_IO_FILE_NOT_FOUND = 1313;
215

216
//Report
217
218
const ERROR_UNKNOWN_LINK_QUALIFIER = 1400;
const ERROR_UNDEFINED_RENDER_CONTROL_COMBINATION = 1401;
219
220
221
222
223
224
225
226
const ERROR_MISSING_REQUIRED_DELETE_QUALIFIER = 1402;
const ERROR_MISSING_VALUE = 1403;
const ERROR_INVALID_VALUE = 1404;
const ERROR_MULTIPLE_DEFINITION = 1405;
const ERROR_MULTIPLE_URL_PAGE_MAILTO_DEFINITION = 1406;
const ERROR_UNKNOWN_TOKEN = 1407;
const ERROR_TOO_FEW_PARAMETER_FOR_SENDMAIL = 1408;
const ERROR_TOO_MANY_PARAMETER = 1409;
227

228
// Upload
229
const ERROR_UPLOAD = 1500;
230
231
232
const ERROR_UPLOAD_TOO_BIG = 1501;
const ERROR_UPLOAD_FILE_TYPE = 1502;
const ERROR_UPLOAD_GET_MIME_TYPE = 1503;
Carsten  Rose's avatar
Carsten Rose committed
233
const ERROR_UPLOAD_UNKNOWN_ACTION = 1504;
234
const ERROR_NO_TARGET_PATH_FILE_NAME = 1505;
235

Carsten  Rose's avatar
Carsten Rose committed
236
// LDAP
237
const ERROR_LDAP_CONNECT = 1600;
238
const ERROR_MISSING_TYPE_AHEAD_LDAP_SEARCH = 1601;
239
240
const ERROR_MISSING_TYPE_AHEAD_LDAP_SEARCH_PREFETCH = 1602;
const ERROR_LDAP_BIND = 1603;
241

Carsten  Rose's avatar
Carsten Rose committed
242
243
244
245
246
// Download
const ERROR_DOWNLOAD_CREATE_NEW_FILE = 1700;
const ERROR_DOWNLOAD_NO_FILES = 1701;
const ERROR_DOWNLOAD_NOTHING_TO_DO = 1702;
const ERROR_DOWNLOAD_UNEXPECTED_MIMETYPE = 1703;
Carsten  Rose's avatar
Carsten Rose committed
247
const ERROR_DOWNLOAD_UNEXPECTED_NUMBER_OF_SOURCES = 1704;
Carsten  Rose's avatar
Carsten Rose committed
248

249
250
// KeyValueParser
const ERROR_KVP_VALUE_HAS_NO_KEY = 1900;
251

252
// DB Errors
253
254
255
256
257
258
259
260
261
262
263
264
const ERROR_DB_OPEN = 2000;
const ERROR_DB_EXECUTE = 2001;
const ERROR_DB_PREPARE = 2002;
const ERROR_DB_BIND = 2003;
const ERROR_DB_QUERY = 2004;
const ERROR_DB_GENERIC_CHECK = 2005;
const ERROR_DB_TOO_FEW_ROWS = 2006;
const ERROR_DB_TOO_MANY_ROWS = 2007;
const ERROR_DB_COUNT_DO_NOT_MATCH = 2008;
const ERROR_DB_CLOSE_MYSQLI_RESULT = 2009;
const ERROR_DB_CLOSE_MYSQLI_STMT = 2010;
const ERROR_DB_UNKNOWN_COLUMN = 2011;
265
266
267
const ERROR_DB_UNKNOWN_COMMAND = 2012;
const ERROR_DB_MISSING_COLUMN_ID = 2013;
const ERROR_DB_COLUMN_NOT_FOUND_IN_TABLE = 2014;
268
const ERROR_DB_SET_CHARSET = 2015;
Carsten  Rose's avatar
Carsten Rose committed
269
const ERROR_DB_MULTI_QUERY_FAILED = 2016;
Carsten  Rose's avatar
Carsten Rose committed
270
271
272
273

// onArray
const ERROR_SUBSTITUTE_FOUND = 2100;

Carsten  Rose's avatar
Carsten Rose committed
274
// Dirty
Carsten  Rose's avatar
Carsten Rose committed
275
276
277
const ERROR_DIRTY_MISSING_FORM_IN_SIP = 2200;
const ERROR_DIRTY_DELETE_RECORD = 2201;
const ERROR_DIRTY_UNKNOWN_ACTION = 2202;
278
279
const ERROR_DIRTY_MISSING_LOCK = 2203;
const ERROR_DIRTY_ALREADY_LOCKED = 2204;
Carsten  Rose's avatar
Carsten Rose committed
280
const ERROR_DIRTY_RECORD_MODIFIED = 2205;
Carsten  Rose's avatar
Carsten Rose committed
281

282
283
284
// Language
const ERROR_LANGUAGE_NOT_CONFIGURED_IN_QFQ = 2300;

285
286
287
288
// Session
const ERROR_MISSING_SESSIONNAME = 2400;
const ERROR_QFQ_SESSION_MISSING = 2401;
const ERROR_SESSION_BROKEN_SCRIPT_PATH = 2402;
289

290
291
292
const ERROR_HTML2PDF_MISSING_CONFIG = 2500;
const ERROR_HTML2PDF_WKHTML_NOT_EXECUTABLE = 2501;
const ERROR_HTML2PDF_WKHTML_FAILED = 2502;
293
294

const ERROR_THUMBNAIL_RENDER = 2600;
295
296
297
//
// Store Names: Identifier
//
298
299
const STORE_FORM = "F";  // form, still not saved in database
const STORE_SIP = "S"; // SIP
Carsten  Rose's avatar
Carsten Rose committed
300
const STORE_RECORD = "R"; // selected record from primary table.
301
const STORE_BEFORE = "B"; // selected record from primary table before any modifcations.
302
const STORE_PARENT_RECORD = "P"; // on multi forms the recent record of the outer query (multi).
303
304
const STORE_TABLE_DEFAULT = "D"; // definition of primary table.
const STORE_TABLE_COLUMN_TYPES = "M"; // column types of primary table.
305
const STORE_CLIENT = "C"; // Client: POST variable, if not found: GET variable
306
const STORE_TYPO3 = "T"; // Typo3 > Page content record > bodytext
307
const STORE_VAR = "V"; // Generic Vars
308
const STORE_ZERO = "0"; // value: 0, might helpfull if variable is empty but used in an SQL statement, which might produce a SQL error otherwise if substituted with an empty string
309
const STORE_EMPTY = "E"; // value: '', might helpfull if variable is not defined and should result in an empty string instead of {{...}} (cause not replaced)
Carsten  Rose's avatar
Carsten Rose committed
310
const STORE_SYSTEM = "Y"; // various system values like db connection credentials
Carsten  Rose's avatar
Carsten Rose committed
311
const STORE_EXTRA = 'X'; // Persistent Store: contains arrays! Not Usefull for user. Used by system.
312
const STORE_ADDITIONAL_FORM_ELEMENTS = 'A'; // Internal Store to collect FormElements. Typically for 'hidden' elements of radio and checkbox. Helps render those elements at the end of the whole form rendering.
313
const STORE_LDAP = 'L';
314

315
const STORE_USE_DEFAULT = "FSRVD";
316

317
//
Carsten  Rose's avatar
Carsten Rose committed
318
// Store: Definitions / Members
319
320
//

Carsten  Rose's avatar
Carsten Rose committed
321
// URL variables
322
323
const CLIENT_FORM = 'form';
const CLIENT_SIP = 's';
324
const CLIENT_RECORD_ID = 'r';
325
326
const CLIENT_KEY_SEM_ID = 'keySemId';
const CLIENT_KEY_SEM_ID_USER = 'keySemIdUser';
327
328
329
const CLIENT_PAGE_ID = 'id';
const CLIENT_PAGE_TYPE = 'type';
const CLIENT_PAGE_LANGUAGE = 'L';
330
const CLIENT_UPLOAD_FE_NAME = 'name';
Carsten  Rose's avatar
Carsten Rose committed
331

332
333
const CLIENT_SIP_FOR_FORM = '_sipForForm';
const CLIENT_FE_NAME = '_feName';
334
const CLIENT_TYPO3VARS = '_sipForTypo3Vars';
335

336
337
338
339
340
341
342
// ALL $_SERVER variables: http://php.net/manual/en/reserved.variables.server.php
// The following exist and might be the most used ones.
const CLIENT_SCRIPT_URL = 'SCRIPT_URL';
const CLIENT_SCRIPT_URI = 'SCRIPT_URI';
const CLIENT_HTTP_HOST = 'HTTP_HOST';
const CLIENT_HTTP_USER_AGENT = 'HTTP_USER_AGENT';
const CLIENT_SERVER_NAME = 'SERVER_NAME';
343
const CLIENT_SERVER_ADDRESS = 'SERVER_ADDR';
344
const CLIENT_SERVER_PORT = 'SERVER_PORT';
345
const CLIENT_REMOTE_ADDRESS = 'REMOTE_ADDR';
346
347
348
349
350
351
352
const CLIENT_REQUEST_SCHEME = 'REQUEST_SCHEME';
const CLIENT_SCRIPT_FILENAME = 'SCRIPT_FILENAME';
const CLIENT_QUERY_STRING = 'QUERY_STRING';
const CLIENT_REQUEST_URI = 'REQUEST_URI';
const CLIENT_SCRIPT_NAME = 'SCRIPT_NAME';
const CLIENT_PHP_SELF = 'PHP_SELF';

353
// _COOKIE
Carsten  Rose's avatar
Carsten Rose committed
354
355
const CLIENT_COOKIE_QFQ = 'cookieQfq';

Carsten  Rose's avatar
Carsten Rose committed
356
// T3 Bodytext Keywords
357
const TYPO3_FORM = CLIENT_FORM;
358
const TYPO3_RECORD_ID = CLIENT_RECORD_ID;
359
const TYPO3_BE_USER_LOGGED_IN = 'beUserLoggedIn';   // 'yes' | 'no'
360
361
362
const TYPO3_FE_USER = 'feUser';
const TYPO3_FE_USER_UID = 'feUserUid';
const TYPO3_FE_USER_GROUP = 'feUserGroup';
363
const TYPO3_TT_CONTENT_UID = 'ttcontentUid';
364
const TYPO3_PAGE_ID = 'pageId';
365
366
const TYPO3_PAGE_ALIAS = 'pageAlias';
const TYPO3_PAGE_TITLE = 'pageTitle';
367
const TYPO3_PAGE_TYPE = 'pageType';
368

369
const TYPO3_PAGE_LANGUAGE = 'pageLanguage';
370
const TYPO3_DEBUG_SHOW_BODY_TEXT = 'debugShowBodyText';
371
372
const TYPO3_SQL_LOG = 'sqlLog';
const TYPO3_SQL_LOG_MODE = 'sqlLogMode';
373

374
// Deprecated: legacy config - still used to read old configuration file.
375
376
377
378
const SYSTEM_DB_USER = 'DB_USER';
const SYSTEM_DB_SERVER = 'DB_SERVER';
const SYSTEM_DB_PASSWORD = 'DB_PASSWORD';
const SYSTEM_DB_NAME = 'DB_NAME';
379

380
// Recent DB config
381
382
383
384
385
const SYSTEM_DB_1_USER = 'DB_1_USER';
const SYSTEM_DB_1_SERVER = 'DB_1_SERVER';
const SYSTEM_DB_1_PASSWORD = 'DB_1_PASSWORD';
const SYSTEM_DB_1_NAME = 'DB_1_NAME';

386
const SYSTEM_DB_INIT = 'DB_INIT';
387
388
389
390

const SYSTEM_DB_INDEX_DATA = "DB_INDEX_DATA";
const SYSTEM_DB_INDEX_QFQ = "DB_INDEX_QFQ";

391
392
393
394
// Computed dynamically
const SYSTEM_DB_NAME_DATA = '_dbNameData';
const SYSTEM_DB_NAME_QFQ = '_dbNameQfq';

395
const SYSTEM_SQL_LOG = 'SQL_LOG'; //  Logging to file
396
const SYSTEM_SQL_LOG_FILE = '../../sql.log';
397
const SYSTEM_SQL_LOG_MODE = 'SQL_LOG_MODE'; // Mode, which statements to log.
398
const SYSTEM_DATE_FORMAT = 'DATE_FORMAT';
399
const SYSTEM_REDIRECT_ALL_MAIL_TO = 'REDIRECT_ALL_MAIL_TO';
400
401
const SYSTEM_MAIL_LOG = 'MAIL_LOG';
const SYSTEM_MAIL_LOG_FILE = '../../mail.log';
402
403

const SYSTEM_SHOW_DEBUG_INFO = 'SHOW_DEBUG_INFO';
404
405
const SYSTEM_SHOW_DEBUG_INFO_YES = 'yes';
const SYSTEM_SHOW_DEBUG_INFO_NO = 'no';
406
const SYSTEM_SHOW_DEBUG_INFO_AUTO = 'auto'; // Remains on value 'auto' as long as there is no BE User logged in. In other words: 'auto'='no'. #5031
407
408
const SYSTEM_SHOW_DEBUG_INFO_DOWNLOAD = 'download';

409
410
const SYSTEM_CSS_LINK_CLASS_INTERNAL = 'CSS_LINK_CLASS_INTERNAL';
const SYSTEM_CSS_LINK_CLASS_EXTERNAL = 'CSS_LINK_CLASS_EXTERNAL';
411
const SYSTEM_CSS_CLASS_QFQ_CONTAINER = 'CSS_CLASS_QFQ_CONTAINER';
412
const SYSTEM_CSS_CLASS_QFQ_FORM = 'CSS_CLASS_QFQ_FORM';
413
414
const SYSTEM_CSS_CLASS_QFQ_FORM_PILL = 'CSS_CLASS_QFQ_FORM_PILL';
const SYSTEM_CSS_CLASS_QFQ_FORM_BODY = 'CSS_CLASS_QFQ_FORM_BODY';
415

416
417
418
419
420
421
// Textmessages used for Form validation.
const SYSTEM_FORM_DATA_PATTERN_ERROR = 'FORM_DATA_PATTERN_ERROR';
const SYSTEM_FORM_DATA_REQUIRED_ERROR = 'FORM_DATA_REQUIRED_ERROR';
const SYSTEM_FORM_DATA_MATCH_ERROR = 'FORM_DATA_MATCH_ERROR';
const SYSTEM_FORM_DATA_ERROR = 'FORM_DATA_ERROR';

422
423
const SYSTEM_FORM_BS_COLUMNS = 'FORM_BS_COLUMNS';

424
425
426
const SYSTEM_FORM_BS_LABEL_COLUMNS = 'FORM_BS_LABEL_COLUMNS';
const SYSTEM_FORM_BS_INPUT_COLUMNS = 'FORM_BS_INPUT_COLUMNS';
const SYSTEM_FORM_BS_NOTE_COLUMNS = 'FORM_BS_NOTE_COLUMNS';
427

428
429
const SYSTEM_FORM_BUTTON_ON_CHANGE_CLASS = 'FORM_BUTTON_ON_CHANGE_CLASS';

430
431
432
const SYSTEM_BASE_URL_PRINT = 'BASE_URL_PRINT';
const SYSTEM_WKHTMLTOPDF = 'WKHTMLTOPDF';

433
434
435
const SYSTEM_SEND_E_MAIL = 'sendEmail';
const SYSTEM_SEND_E_MAIL_OPTIONS = 'SEND_E_MAIL_OPTIONS';

436
437
const SYSTEM_EDIT_FORM_PAGE = 'EDIT_FORM_PAGE';

438
439
// computed automatically during runtime
const SYSTEM_PATH_EXT = 'EXT_PATH';
440
const SYSTEM_SITE_PATH = 'SITE_PATH';
441

442
443
444
445
446
447
const SYSTEM_LDAP_1_RDN = 'LDAP_1_RDN'; // Credentials to access LDAP
const SYSTEM_LDAP_1_PASSWORD = 'LDAP_1_PASSWORD'; // Credentials to access LDAP

const SYSTEM_ESCAPE_TYPE_DEFAULT = 'ESCAPE_TYPE_DEFAULT';
const SYSTEM_SECURITY_VARS_HONEYPOT = 'SECURITY_VARS_HONEYPOT'; // Fake variables
const SYSTEM_SECURITY_ATTACK_DELAY = 'SECURITY_ATTACK_DELAY'; // Detected attack causes x seconds delay
448
const SYSTEM_SECURITY_ATTACK_DELAY_DEFAULT = 5; // Detected attack causes x seconds delay
449
450
const SYSTEM_SECURITY_SHOW_MESSAGE = 'SECURITY_SHOW_MESSAGE'; // Detected attack shows an error message
const SYSTEM_SECURITY_GET_MAX_LENGTH = 'SECURITY_GET_MAX_LENGTH'; // Trim every character (before conversion) to SECURITY_GET_MAX_LENGTH chars;
451
452
453
454
const SYSTEM_SECURITY_GET_MAX_LENGTH_DEFAULT = 50; // Default max length for get variables

const GET_EXTRA_LENGTH_TOKEN = '_';

455
456
const SYSTEM_GFX_EXTRA_BUTTON_INFO_INLINE = 'GFX_EXTRA_BUTTON_INFO_INLINE';
const SYSTEM_GFX_EXTRA_BUTTON_INFO_BELOW = 'GFX_EXTRA_BUTTON_INFO_BELOW';
457
458
459
const SYSTEM_EXTRA_BUTTON_INFO_POSITION = 'EXTRA_BUTTON_INFO_POSITION';
const SYSTEM_EXTRA_BUTTON_INFO_POSITION_AUTO = 'auto';
const SYSTEM_EXTRA_BUTTON_INFO_POSITION_BELOW = 'below';
460
const SYSTEM_EXTRA_BUTTON_INFO_CLASS = 'EXTRA_BUTTON_INFO_CLASS';
461

462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
const SYSTEM_SAVE_BUTTON_TEXT = 'SAVE_BUTTON_TEXT';
const SYSTEM_SAVE_BUTTON_TOOLTIP = 'SAVE_BUTTON_TOOLTIP';
const SYSTEM_SAVE_BUTTON_CLASS = 'SAVE_BUTTON_CLASS';
const SYSTEM_SAVE_BUTTON_GLYPH_ICON = 'SAVE_BUTTON_GLYPH_ICON';

const SYSTEM_CLOSE_BUTTON_TEXT = 'CLOSE_BUTTON_TEXT';
const SYSTEM_CLOSE_BUTTON_TOOLTIP = 'CLOSE_BUTTON_TOOLTIP';
const SYSTEM_CLOSE_BUTTON_CLASS = 'CLOSE_BUTTON_CLASS';
const SYSTEM_CLOSE_BUTTON_GLYPH_ICON = 'CLOSE_BUTTON_GLYPH_ICON';

const SYSTEM_DELETE_BUTTON_TEXT = 'DELETE_BUTTON_TEXT';
const SYSTEM_DELETE_BUTTON_TOOLTIP = 'DELETE_BUTTON_TOOLTIP';
const SYSTEM_DELETE_BUTTON_CLASS = 'DELETE_BUTTON_CLASS';
const SYSTEM_DELETE_BUTTON_GLYPH_ICON = 'DELETE_BUTTON_GLYPH_ICON';

const SYSTEM_NEW_BUTTON_TEXT = 'NEW_BUTTON_TEXT';
const SYSTEM_NEW_BUTTON_TOOLTIP = 'NEW_BUTTON_TOOLTIP';
const SYSTEM_NEW_BUTTON_CLASS = 'NEW_BUTTON_CLASS';
const SYSTEM_NEW_BUTTON_GLYPH_ICON = 'NEW_BUTTON_GLYPH_ICON';

482
483
484
485
486
const SYSTEM_DB_UPDATE = 'DB_UPDATE';
const SYSTEM_DB_UPDATE_ALWAYS = 'always';
const SYSTEM_DB_UPDATE_NEVER = 'never';
const SYSTEM_DB_UPDATE_AUTO = 'auto';

Carsten  Rose's avatar
Carsten Rose committed
487
488
const SYSTEM_RECORD_LOCK_TIMEOUT_SECONDS = 'RECORD_LOCK_TIMEOUT_SECONDS';
const SYSTEM_RECORD_LOCK_TIMEOUT_SECONDS_DEFAULT = 900; // 15 mins
Carsten  Rose's avatar
Carsten Rose committed
489

490
// Deprecated, replaced by SYSTEM_FILL_STORE_SYSTEM_BY_SQ
491
const SYSTEM_VAR_ADD_BY_SQL = 'VAR_ADD_BY_SQL'; // since 1.12.17
492
//const SYSTEM_VAR_ADD_BY_SQL_DEFAULT = 'SELECT id AS periodId FROM Period WHERE start<=NOW() ORDER BY start DESC LIMIT 1';
493

494
495
const SYSTEM_FILL_STORE_SYSTEM_BY_SQL = 'FILL_STORE_SYSTEM_BY_SQL';
const SYSTEM_FILL_STORE_SYSTEM_ERROR_MSG = 'FILL_STORE_SYSTEM_ERROR_MSG';
496

497
498
499
500
501
502
503
504
505
506
507
508
509
510
const SYSTEM_FORM_LANGUAGE = 'FORM_LANGUAGE';

const SYSTEM_FORM_LANGUAGE_A_ID = 'FORM_LANGUAGE_A_ID';
const SYSTEM_FORM_LANGUAGE_A_LABEL = 'FORM_LANGUAGE_A_LABEL';

const SYSTEM_FORM_LANGUAGE_B_ID = 'FORM_LANGUAGE_B_ID';
const SYSTEM_FORM_LANGUAGE_B_LABEL = 'FORM_LANGUAGE_B_LABEL';

const SYSTEM_FORM_LANGUAGE_C_ID = 'FORM_LANGUAGE_C_ID';
const SYSTEM_FORM_LANGUAGE_C_LABEL = 'FORM_LANGUAGE_C_LABEL';

const SYSTEM_FORM_LANGUAGE_D_ID = 'FORM_LANGUAGE_D_ID';
const SYSTEM_FORM_LANGUAGE_D_LABEL = 'FORM_LANGUAGE_D_LABEL';

511
512
const SYSTEM_ENTER_AS_SUBMIT = 'enterAsSubmit';

513
514
515
516
517
518
519
520
// Thumbnail
const SYSTEM_CMD_INKSCAPE = 'cmdInkscape';
const SYSTEM_CMD_CONVERT = 'cmdConvert';
const SYSTEM_THUMBNAIL_DIR_SECURE = 'thumbnailDirSecure';
const SYSTEM_THUMBNAIL_DIR_SECURE_DEFAULT = 'fileadmin/protected/qfqThumbnail';
const SYSTEM_THUMBNAIL_DIR_PUBLIC = 'thumbnailDirPublic';
const SYSTEM_THUMBNAIL_DIR_PUBLIC_DEFAULT = 'typo3temp/qfqThumbnail';

521
522
523
const DOCUMENTATION_QFQ = 'DOCUMENTATION_QFQ';
const DOCUMENTATION_QFQ_URL = 'https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-053/Manual.html';

524

525
// Not stored in config.qfq.ini, but used in STORE_SYSTEM
526
// Information for: Log / Debug / Exception
Carsten  Rose's avatar
Carsten Rose committed
527
528
529
530
const SYSTEM_SQL_RAW = 'sqlRaw';  // Type: SANITIZE_ALL / String. SQL Query (before substitute). Useful for error reporting.
const SYSTEM_SQL_FINAL = 'sqlFinal'; //  Type: SANITIZE_ALL / String. SQL Query (after substitute). Useful for error reporting.
const SYSTEM_SQL_COUNT = 'sqlCount'; //  Type: SANITIZE_DIGIT / Int.Number of rows in SQL ResultSet. Useful for error reporting.
const SYSTEM_SQL_PARAM_ARRAY = 'sqlParamArray'; //  Type: SANITIZE_ALL / Parameter of prepared SQL Statement. Useful for error reporting.
531
532
const SYSTEM_FORM = CLIENT_FORM;                        // '<formName> / <formId>'
const SYSTEM_FORM_ELEMENT = 'formElement';              // '<formElementName> / <formElementeId>'
533
const SYSTEM_FORM_ELEMENT_ID = 'formElementId';              // '<formElementName> / <formElementeId>'
534
const SYSTEM_FORM_ELEMENT_COLUMN = 'formElementColumn'; // '<columnname of current processed formElement>'
535
const SYSTEM_FORM_ELEMENT_MESSAGE = 'formElementMessage'; // '<columnname of current processed formElement>'
536
537
const SYSTEM_REPORT_COLUMN_INDEX = 'reportColumnIndex'; // Keyname of SQL-column processed at the moment.
const SYSTEM_REPORT_COLUMN_NAME = 'reportColumnName'; // Keyname of SQL-column processed at the moment.
538
539
const SYSTEM_REPORT_COLUMN_VALUE = 'reportColumnValue'; // Keyname of SQL-column processed at the moment.
const SYSTEM_REPORT_FULL_LEVEL = 'reportFullLevel'; // Keyname of SQL-column processed at the moment.
540
const SYSTEM_MESSAGE_DEBUG = 'messageDebug';
Carsten  Rose's avatar
Carsten Rose committed
541
542
543
544
545
const SYSTEM_DOWNLOAD_POPUP = 'hasDownloadPopup'; // Marker which is set to 'true' if there is at least one Download Link rendered
const DOWNLOAD_POPUP_REQUEST = 'true';
const DOWNLOAD_POPUP_REPLACE_TEXT = '#downloadPopupReplaceText#';
const DOWNLOAD_POPUP_REPLACE_TITLE = '#downloadPopupReplaceTitle#';

546
const SYSTEM_PARAMETER_LANGUAGE_FIELD_NAME = 'parameterLanguageFieldName';
547
548
const CSS_REQUIRED = 'required-field';

549
// die folgenden Elemente sind vermutlich nicht noetig, wenn Store Klassen globale Vars benutzt.
Carsten  Rose's avatar
Carsten Rose committed
550
551
552
//const SYSTEM_FORM_DEF = 'formDefinition'; // Type: SANITIZE_ALNUMX / AssocArray. Final form to process. Useful for error reporting.
//const SYSTEM_FORM_ELEMENT_DEF = 'formElementDefinition'; // Type: SANITIZE_ALL / AssocArray. Formelement which are processed at the moment. Useful for error reporting.
//const SYSTEM_FORM_ELEMENT_FIELD = 'formElementField'; // Type: SANITIZE_ALNUMX / String. Fieldname of processed Formelement. Useful for error reporting.
553

554
555
556
557
558
559
560
const MODE_HTML = 'html';
const MODE_JSON = 'json';

const MSG_HEADER = 'header';
const MSG_CONTENT = 'content';
const MSG_ERROR_CODE = 'errorCode';

561
const SIP_TOKEN_LENGTH = 13; // length of string returned by `uniqid()`
562
563
const SIP_SIP = CLIENT_SIP;  // s
const SIP_RECORD_ID = CLIENT_RECORD_ID; // r
Carsten  Rose's avatar
Carsten Rose committed
564
const SIP_TARGET_URL = '_targetUrl'; // URL where to jump after delete()
565
const SIP_MODE_ANSWER = '_modeAnswer'; // Mode how delete() will answer to client: MODE_HTML, MODE_JSON
566
const SIP_FORM = CLIENT_FORM;
567
const SIP_TABLE = 'table'; // delete a record from 'table'
568
const SIP_URLPARAM = 'urlparam';
569
const SIP_MAKE_URLPARAM_UNIQ = '_makeUrlParamUniq'; // SIPs for 'new records' needs to be uniq per TAB! Therefore add a uniq parameter
Carsten  Rose's avatar
Carsten Rose committed
570
571
572
573
const SIP_DOWNLOAD_PARAMETER = '_b64_download'; // Parametername, filled in SIP, to hold all download element parameter.

const SIP_PREFIX_BASE64 = '_b64';

574
575
576
577
578
const SIP_EXCLUDE_ID = 'id';
const SIP_EXCLUDE_TYPE = 'type';
const SIP_EXCLUDE_L = 'L';
const SIP_EXCLUDE_XDEBUG_SESSION_START = 'XDEBUG_SESSION_START';

Carsten  Rose's avatar
Carsten Rose committed
579
// FURTHER: all extracted params from 'urlparam
580

581
582
const ACTION_KEYWORD_SLAVE_ID = 'slaveId';

583
const VAR_RANDOM = 'random';
584
585
586
const VAR_FILE_DESTINATION = 'fileDestination';
const VAR_SLAVE_ID = ACTION_KEYWORD_SLAVE_ID;
const VAR_FILENAME = 'filename'; // Original filename of an uploaded file.
587
588
const VAR_FILENAME_BASE = 'filenameBase'; // Original filename of an uploaded file, without the extension.
const VAR_FILENAME_EXT = 'filenameExt'; // Extension of the original filename of an uploaded file, .
589

590
// PHP class Typeahead
591
const TYPEAHEAD_API_QUERY = 'query';  // Name of parameter in API call of typeahead.php?query=...&s=... - See also FE_TYPE_AHEAD_SQL
592
const TYPEAHEAD_API_PREFETCH = 'prefetch';  // Name of parameter in API call of typeahead.php?prefetch=...&s=... - See also FE_TYPE_AHEAD_SQL
593
594
const TYPEAHEAD_API_SIP = 'sip';  // Name of parameter in API call of typeahead.php?query=...&s=...
const TYPEAHEAD_DEFAULT_LIMIT = 20;
595
const TYPEAHEAD_SQL_KEY_NAME = 'id';
596

597
598
const DEFAULT_LDAP_TIME_LIMIT = 3;

599
600
const SINGLE_TICK = "'";
const DOUBLE_TICK = '"';
Carsten  Rose's avatar
#2067    
Carsten Rose committed
601

602
// TOKEN evaluate
603
const TOKEN_ESCAPE_CONFIG = 'c';
604
605
const TOKEN_ESCAPE_SINGLE_TICK = 's';
const TOKEN_ESCAPE_DOUBLE_TICK = 'd';
606
607
608
609
const TOKEN_ESCAPE_LDAP_FILTER = 'l';
const TOKEN_ESCAPE_LDAP_DN = 'L';
const TOKEN_ESCAPE_MYSQL = 'm';
const TOKEN_ESCAPE_NONE = '-';
610
611
612
613
614
615
616

// Workaround for PHP < 5.6.0
if (!function_exists('ldap_escape')) {
    define('LDAP_ESCAPE_FILTER', 0x01);
    define('LDAP_ESCAPE_DN', 0x02);
}

617
const TOKEN_FOUND_IN_STORE_QUERY = 'query';
618
const TOKEN_FOUND_AS_DEFAULT = 'default';
619
620
621

const RANDOM_LENGTH = 32;

622
// FORM - copy from table 'form' of processed form
623
//const DEF_FORM_NAME = CLIENT_FORM;
624
625

// FORMELEMENT - copy of all formElements of processed form
626
//const DEF_FORM_ELEMENT_ID = 'id';
627

628
629
630
// SQL logging Modes
const SQL_LOG_MODE_ALL = 'all';
const SQL_LOG_MODE_MODIFY = 'modify';
631
632
const SQL_LOG_MODE_NONE = 'none';
const SQL_LOG_MODE_ERROR = 'error';
633

634
const MODE_LDAP_PREFETCH = 'ldapPrefetch';
635
636
637
const MODE_LDAP_SINGLE = 'ldapSingle';
const MODE_LDAP_MULTI = 'ldapMulti';

638
// api/save.php, api/delete.php, api/load.php
639
const API_DELETE_PHP = 'delete.php';
Carsten  Rose's avatar
Carsten Rose committed
640
const API_DOWNLOAD_PHP = 'download.php';
641

642
643
644
645
const API_STATUS = 'status';
const API_MESSAGE = 'message';
const API_REDIRECT = 'redirect';
const API_REDIRECT_URL = 'redirect-url';
Carsten  Rose's avatar
Carsten Rose committed
646
647
const API_LOCK_ACTION = 'action';
const API_LOCK_TIMEOUT = 'lock_timeout';
648
649
const API_FIELD_NAME = 'field-name';
const API_FIELD_MESSAGE = 'field-message';
Carsten  Rose's avatar
Carsten Rose committed
650
const API_FORM_UPDATE = 'form-update';
651
652
653
654
655
656
const API_FORM_UPDATE_FORM_ELEMENT = 'form-element';
const API_FORM_UPDATE_VALUE = 'value';
const API_FORM_UPDATE_HIDDEN = 'hidden';
const API_FORM_UPDATE_DISABLED = 'disabled';
const API_FORM_UPDATE_REQUIRED = 'required';

657
const API_ELEMENT_UPDATE = 'element-update';
658
659
const API_ELEMENT_ATTRIBUTE = 'attr';
const API_ELEMENT_CONTENT = 'content';
660

661
662
663
664
const API_SUBMIT_REASON = 'submit_reason';
const API_SUBMIT_REASON_SAVE = 'save';
const API_SUBMIT_REASON_SAVE_CLOSE = 'save,close';

Carsten  Rose's avatar
Carsten Rose committed
665
const API_LOCK_ACTION_LOCK = 'lock';
666
const API_LOCK_ACTION_EXTEND = 'extend';
Carsten  Rose's avatar
Carsten Rose committed
667
668
const API_LOCK_ACTION_RELEASE = 'release';

669
const API_ANSWER_STATUS_SUCCESS = 'success';
Carsten  Rose's avatar
Carsten Rose committed
670
671
const API_ANSWER_STATUS_CONFLICT = 'conflict';
const API_ANSWER_STATUS_CONFLICT_ALLOW_FORCE = 'conflict_allow_force';
672
673
674
675
const API_ANSWER_STATUS_ERROR = 'error';
const API_ANSWER_REDIRECT_CLIENT = 'client';
const API_ANSWER_REDIRECT_NO = 'no';
const API_ANSWER_REDIRECT_URL = 'url';
676
const API_ANSWER_REDIRECT_URL_SKIP_HISTORY = 'url-skip-history';
677

678
679
680
681
682
683
684
const API_TYPEAHEAD_KEY = 'key';
const API_TYPEAHEAD_VALUE = 'value';

const DATA_HIDDEN = 'data-hidden';
const DATA_DISABLED = 'data-disabled';
const DATA_REQUIRED = 'data-required';

Carsten  Rose's avatar
Carsten Rose committed
685
const CLASS_TYPEAHEAD = 'qfq-typeahead';
686
const DATA_TYPEAHEAD_SIP = 'data-typeahead-sip'; // Used for typeAhead
687
688
689

const CLASS_NOTE = 'qfq-note';

690
691
const DATA_ENABLE_SAVE_BUTTON = 'data-enable-save-button';

Carsten  Rose's avatar
Carsten Rose committed
692
693
694
//const CLASS_TYPEAHEAD = 'qfq-type-ahead';
//const DATA_TYPEAHEAD_SIP = 'data-sip'; // Used for typeAhead

695
696
const DATA_TYPEAHEAD_LIMIT = 'data-typeahead-limit';
const DATA_TYPEAHEAD_MINLENGTH = 'data-typeahead-minlength';
697
const DATA_TYPEAHEAD_PEDANTIC = 'data-typeahead-pedantic';
698

699
700
701
const CLASS_CHARACTER_COUNT = 'qfq-character-count';
const DATA_CHARACTER_COUNT_ID = 'data-character-count-id';

702
703
const CLASS_FORM_ELEMENT_EDIT = 'qfq-form-element-edit';

704
// BuildForm
705
706
const SYMBOL_NEW = 'new';
const SYMBOL_EDIT = 'edit';
707
const SYMBOL_SHOW = 'show';
708
const SYMBOL_DELETE = 'delete';
709
710

//CHECKBOX
711
712
713
const ALIGN_HORIZONTAL = 'horizontal';
const ALIGN_VERTICAL = 'vertical';

714
// Subrecord
715
const SUBRECORD_COLUMN_DEFAULT_MAX_LENGTH = 20;
716
717
718
const FORM_ELEMENTS_NATIVE = 'native';
const FORM_ELEMENTS_SUBRECORD = 'subrecord';
const FORM_ELEMENTS_NATIVE_SUBRECORD = 'native_subrecord';
Carsten  Rose's avatar
Carsten Rose committed
719
//const FORM_ELEMENTS_DYNAMIC_UPDATE = 'native_dynamic_update';
720
721
722
723
724
const SUBRECORD_NEW = SYMBOL_NEW;
const SUBRECORD_EDIT = SYMBOL_EDIT;
const SUBRECORD_DELETE = SYMBOL_DELETE;
const SUBRECORD_PARAMETER_FORM = CLIENT_FORM;
const SUBRECORD_PARAMETER_PAGE = 'page';
725
726
const SUBRECORD_PARAMETER_DETAIL = 'detail';

727
728
729
730
731
732
733
734
735
736
737
const SUBRECORD_COLUMN_TITLE = 'title';
const SUBRECORD_COLUMN_MAX_LENGTH = 'maxLength';
const SUBRECORD_COLUMN_NO_STRIP = 'nostrip';
const SUBRECORD_COLUMN_ICON = 'icon';
const SUBRECORD_COLUMN_LINK = 'link';
const SUBRECORD_COLUMN_URL = 'url';
const SUBRECORD_COLUMN_MAILTO = 'mailto';
const SUBRECORD_COLUMN_ROW_CLASS = '_rowClass';
const SUBRECORD_COLUMN_ROW_TITLE = '_rowTitle';
const SUBRECORD_COLUMN_ROW_TOOLTIP = '_rowTooltip';

738
const SUBRECORD_TABLE_CLASS_DEFAULT = 'table table-hover qfq-table-100';
Carsten  Rose's avatar
Carsten Rose committed
739

740
const GLYPH_ICON = 'glyphicon';
741
742
743
const GLYPH_ICON_EDIT = 'glyphicon-pencil';
const GLYPH_ICON_NEW = 'glyphicon-plus';
const GLYPH_ICON_DELETE = 'glyphicon-trash';
744
745
746
const GLYPH_ICON_HELP = 'glyphicon-question-sign';
const GLYPH_ICON_INFO = 'glyphicon-info-sign';
const GLYPH_ICON_SHOW = 'glyphicon-search';
747
const GLYPH_ICON_TOOL = 'glyphicon-wrench';
748
749
const GLYPH_ICON_CHECK = 'glyphicon-ok';
const GLYPH_ICON_CLOSE = 'glyphicon-remove';
750
const GLYPH_ICON_TASKS = 'glyphicon-tasks';
Carsten  Rose's avatar
Carsten Rose committed
751
const GLYPH_ICON_DUPLICATE = 'glyphicon-duplicate';
Carsten  Rose's avatar
Carsten Rose committed
752
const GLYPH_ICON_VIEW = 'glyphicon-eye-open';
Carsten  Rose's avatar
Carsten Rose committed
753
const GLYPH_ICON_FILE = 'glyphicon-file';
754

755
// FORM columns: real
756
const F_ID = 'id';
757
const F_NAME = 'name';
758
const F_TITLE = 'title';
759
const F_TABLE_NAME = 'tableName';
760
761
const F_REQUIRED_PARAMETER_NEW = 'requiredParameterNew';
const F_REQUIRED_PARAMETER_EDIT = 'requiredParameterEdit';
762
763
const F_EXTRA_DELETE_FORM = 'extraDeleteForm';
const F_FINAL_DELETE_FORM = 'finalDeleteForm';
Carsten  Rose's avatar
Carsten Rose committed
764
const F_DIRTY_MODE = 'dirtyMode';
765

766
const F_SUBMIT_BUTTON_TEXT = 'submitButtonText';
767
const F_BUTTON_ON_CHANGE_CLASS = 'buttonOnChangeClass';
768

769
770
const F_ESCAPE_TYPE_DEFAULT = 'escapeTypeDefault';

771
const F_CLASS = 'class';
772
773
774
const F_CLASS_PILL = 'classPill';
const F_CLASS_BODY = 'classBody';

Carsten  Rose's avatar
Carsten Rose committed
775
776
const F_SHOW_BUTTON = 'showButton';

777
778
779
const F_FORWARD_MODE = 'forwardMode';
const F_FORWARD_PAGE = 'forwardPage';

780
781
const F_FORWARD_MODE_CLIENT = API_ANSWER_REDIRECT_CLIENT;
const F_FORWARD_MODE_NO = API_ANSWER_REDIRECT_NO;
Carsten  Rose's avatar
Carsten Rose committed
782
783
784
785
const F_FORWARD_MODE_URL = API_ANSWER_REDIRECT_URL;
const F_FORWARD_MODE_URL_SKIP_HISTORY = API_ANSWER_REDIRECT_URL_SKIP_HISTORY;
const F_FORWARD_MODE_URL_SIP = 'url-sip';
// client', 'no', 'url', 'url-skip-history'
786

787
788
const F_RECORD_LOCK_TIMEOUT_SECONDS = 'recordLockTimeoutSeconds';

789
790
const F_FE_DATA_PATTERN_ERROR = 'data-pattern-error';
const F_FE_DATA_REQUIRED_ERROR = 'data-required-error';
791
const F_FE_DATA_MATCH_ERROR = 'data-match-error'; // contains id of the sibling input to check that i
792
793
const F_FE_DATA_ERROR = 'data-error';

794
795
const F_PARAMETER = 'parameter';    // valid for F_ and FE_

796
// Form columns: via parameter field
797
const F_DB_INDEX = 'dbIndex';
Carsten  Rose's avatar
Carsten Rose committed
798
const F_DB_INDEX_EXTRA = 'dbIndexExtra';
799
const DB_INDEX_DEFAULT = "1";
800
const PARAM_DB_INDEX_DATA = '__dbIndexData'; // Submitted via SIP to make record locking DB aware.
801

802
803
804
const F_LDAP_SERVER = 'ldapServer';
const F_LDAP_BASE_DN = 'ldapBaseDn';
const F_LDAP_SEARCH = 'ldapSearch';
805
806
const F_LDAP_ATTRIBUTES = 'ldapAttributes';
const F_LDAP_TIME_LIMIT = 'ldapTimeLimit';
807
const F_LDAP_USE_BIND_CREDENTIALS = 'ldapUseBindCredentials';
808
809
const F_TYPEAHEAD_LIMIT = 'typeAheadLimit';
const F_TYPEAHEAD_MINLENGTH = 'typeAheadMinLength';
810
const F_TYPEAHEAD_PEDANTIC = 'typeAheadPedantic';
811
const F_TYPEAHEAD_LDAP_VALUE_PRINTF = 'typeAheadLdapValuePrintf';
812
const F_TYPEAHEAD_LDAP_ID_PRINTF = 'typeAheadLdapIdPrintf';
813
const F_TYPEAHEAD_LDAP_SEARCH = 'typeAheadLdapSearch';
814
const F_TYPEAHEAD_LDAP_SEARCH_PREFETCH = 'typeAheadLdapSearchPrefetch';
815
const F_TYPEAHEAD_LDAP_SEARCH_PER_TOKEN = 'typeAheadLdapSearchPerToken';
816

Carsten  Rose's avatar
Carsten Rose committed
817
818
const F_MODE = 'mode';
const F_MODE_READONLY = 'readonly';
819
const F_MODE_REQUIRED_OFF = 'requiredOff';
820
const F_MODE_GLOBAL = 'formModeGlobal';
Carsten  Rose's avatar
Carsten Rose committed
821

822
823
const F_SAVE_BUTTON_ACTIVE = 'saveButtonActive';

824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
const F_SAVE_BUTTON_TEXT = 'saveButtonText';
const F_SAVE_BUTTON_TOOLTIP = 'saveButtonTooltip';
const F_SAVE_BUTTON_CLASS = 'saveButtonClass';
const F_SAVE_BUTTON_GLYPH_ICON = 'saveButtonGlyphIcon';

const F_CLOSE_BUTTON_TEXT = 'closeButtonText';
const F_CLOSE_BUTTON_TOOLTIP = 'closeButtonTooltip';
const F_CLOSE_BUTTON_CLASS = 'closeButtonClass';
const F_CLOSE_BUTTON_GLYPH_ICON = 'closeButtonGlyphIcon';

const F_DELETE_BUTTON_TEXT = 'deleteButtonText';
const F_DELETE_BUTTON_TOOLTIP = 'deleteButtonTooltip';
const F_DELETE_BUTTON_CLASS = 'deleteButtonClass';
const F_DELETE_BUTTON_GLYPH_ICON = 'deleteButtonGlyphIcon';

const F_NEW_BUTTON_TEXT = 'newButtonText';
const F_NEW_BUTTON_TOOLTIP = 'newButtonTooltip';
const F_NEW_BUTTON_CLASS = 'newButtonClass';
const F_NEW_BUTTON_GLYPH_ICON = 'newButtonGlyphIcon';

844
845
const F_ENTER_AS_SUBMIT = SYSTEM_ENTER_AS_SUBMIT;

846
847
848
849
// FORM_ELEMENT_STATI
const FE_MODE_SHOW = 'show';
const FE_MODE_READONLY = 'readonly';
const FE_MODE_REQUIRED = 'required';
850
const FE_MODE_HIDDEN = 'hidden';
851

852
853
854
855
const FE_CLASS_NATIVE = 'native';
const FE_CLASS_ACTION = 'action';
const FE_CLASS_CONTAINER = 'container';

856
// FormElement columns: real
857
const FE_ID = 'id';
Carsten  Rose's avatar
Carsten Rose committed
858
const FE_ID_CONTAINER = 'feIdContainer';
Carsten  Rose's avatar
Carsten Rose committed
859
const FE_FORM_ID = 'formId';
860
const FE_NAME = 'name';
861
const FE_TYPE = 'type';
862
const FE_MODE = 'mode';
863
const FE_MODE_SQL = 'modeSql';
864
const FE_DYNAMIC_UPDATE = 'dynamicUpdate';
865
const FE_VALUE = 'value';