Constants.php 37.9 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
16
const QFQ_LOG = 'qfq.log';

17
const SESSION_LIFETIME_SECONDS = 86400;
18
const SESSION_NAME = 'qfq';
19
20
21
const SESSION_FE_USER_UID = 'feUserUid';
const SESSION_FE_USER = 'feUser';
const SESSION_FE_USER_GROUP = 'feUserGroup';
22

23
24
const FORM_LOAD = 'form_load';
const FORM_SAVE = 'form_save';
Carsten  Rose's avatar
Carsten Rose committed
25
const FORM_UPDATE = 'form_update';
26
const FORM_DELETE = 'form_delete';
27
28
29
30
31
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';
32
33
const FORM_BUTTON_NEW = 'new';
const FORM_BUTTON_DELETE = 'delete';
34
35
const FORM_BUTTON_CLOSE = 'close';
const FORM_BUTTON_SAVE = 'save';
36

37
38
const F_BS_COLUMNS = 'bsColumns';

39
40
41
42
const F_BS_LABEL_COLUMNS = 'bsLabelColumns';
const F_BS_INPUT_COLUMNS = 'bsInputColumns';
const F_BS_NOTE_COLUMNS = 'bsNoteColumns';

43
44
const RETURN_URL = 'return_url';
const RETURN_SIP = 'return_sip';
45
const RETURN_ARRAY = 'return_array';
46

Carsten  Rose's avatar
Carsten Rose committed
47
48
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";
49
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
50
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";
51
52
53
54
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' ";
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 NAME_TG_COPIES = '_tgCopies';
55

Carsten  Rose's avatar
Carsten Rose committed
56
57
58
// SANITIZE Classifier
const SANITIZE_ALLOW_ALNUMX = "alnumx";
const SANITIZE_ALLOW_DIGIT = "digit";
59
const SANITIZE_ALLOW_NUMERICAL = "numerical";
60
const SANITIZE_ALLOW_EMAIL = "email";
61
62
63
const SANITIZE_ALLOW_MIN_MAX = "min|max";
const SANITIZE_ALLOW_MIN_MAX_DATE = "min|max date";
const SANITIZE_ALLOW_PATTERN = "pattern";
Carsten  Rose's avatar
Carsten Rose committed
64
const SANITIZE_ALLOW_ALLBUT = "allbut";
Carsten  Rose's avatar
Carsten Rose committed
65
66
const SANITIZE_ALLOW_ALL = "all";
const SANITIZE_DEFAULT = SANITIZE_ALLOW_DIGIT;
67

68
69
70
const SANATIZE_EXCEPTION = 'exception';
const SANATIZE_EMPTY_STRING = 'empty string';

71
72
73
74
75
76
// 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';
77
const WRAP_SETUP_SUBRECORD = 'subrecord';
78
const WRAP_SETUP_IN_FIELDSET = 'inFieldset';
79
const WRAP_SETUP_IN_TEMPLATE_GROUP = 'inTemplateGroup';
80
81
82
const WRAP_SETUP_START = 'start';
const WRAP_SETUP_END = 'end';

83
84
85
// dbQuerySimple
const ROW_REGULAR = "regular";
const ROW_IMPLODE_ALL = "implode_all";
86
87
88
89
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";
90
const ROW_KEYS = "keys";
91

92
// KeyValueParser
93
94
const KVP_IF_VALUE_EMPTY_COPY_KEY = 'if_value_empty_copy_key';
const KVP_VALUE_GIVEN = 'value_given';
95

96
// QFQ Error Codes
Carsten  Rose's avatar
Carsten Rose committed
97
const ERROR_UNKNOW_SANITIZE_CLASS = 1001;
98

99
const ERROR_CODE_SHOULD_NOT_HAPPEN = 1003;
100
101
const ERROR_SIP_MALFORMED = 1005;
const ERROR_SIP_INVALID = 1006;
102
const ERROR_MISSING_RECORD_ID = 1007;
103
const ERROR_IN_SQL_STATEMENT = 1008;
104
const ERROR_MISSING_REQUIRED_PARAMETER = 1009;
105
106
107
108
109
110
const ERROR_MISSING_SESSIONNAME = 1010;
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
111
112
113
114
115
116
117
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;
const ERROR_FORM_UNKNOWN_PERMISSION_MODE = 10120;
const ERROR_MULTI_SQL_MISSING = 1021;
const ERROR_RECURSION_TOO_DEEP = 1023;
118
const ERROR_CHECKBOXMODE_UNKNOWN = 1024;
119
const ERROR_MISSING_SQL1 = 1025;
120
const ERROR_CHECKBOX_EQUAL = 1026;
121
const ERROR_MISSING_ITEM_LIST = 1027;
122
const ERROR_UNKNOWN_FORM_RENDER = 1028;
Carsten  Rose's avatar
Carsten Rose committed
123
const ERROR_NAME_LABEL_EMPTY = 1029;
Carsten  Rose's avatar
Carsten Rose committed
124
const ERROR_DEBUG = 1031;
125
126
127
const ERROR_UNKNOWN_MODE = 1032;
const ERROR_NOT_IMPLEMENTED = 1033;
const ERROR_RESERVED_KEY_NAME = 1034;
128
const ERROR_UNKNOWN_FORWARD_MODE = 1036;
Carsten  Rose's avatar
Carsten Rose committed
129
130
131
132
133
134
135
136
137
138
const ERROR_MISSING_HIDDEN_FIELD_IN_SIP = 1038;
const ERROR_MISSING_MIN_MAX = 1040;
const ERROR_MIN_MAX_VIOLATION = 1041;
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;
139

140
const ERROR_INVALID_OR_MISSING_PARAMETER = 1050;
141
const ERROR_UNKNOWN_SQL_LOG_MODE = 1051;
Carsten  Rose's avatar
Carsten Rose committed
142
const ERROR_FORM_NOT_FOUND = 1052;
143
const ERROR_DATE_TIME_FORMAT_NOT_RECOGNISED = 1053;
144
const ERROR_SANATIZE_INVALID_VALUE = 1054;
145
const ERROR_REQUIRED_VALUE_EMPTY = 1055;
146
const ERROR_DATE_UNEXPECTED_FORMAT = 1056;
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
const ERROR_UNEXPECTED_TYPE = 1057;
const ERROR_NOT_APPLICABLE = 108;
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;
164
const ERROR_MISSING_SLAVE_ID_DEFINITION = 1074;
165
const ERROR_MISSING_INTL = 1075;
166
const ERROR_HTML_TOKEN_TOO_SHORT = 1076;
167
const ERROR_MISSING_PRINTF_ARGUMENTS = 1077;
168
const ERROR_MISSING_DEFINITON = 1078;
169
const ERROR_QFQ_VERSION = 1079;
Carsten  Rose's avatar
Carsten Rose committed
170
const ERROR_PLAY_SQL_FILE = 1080;
171

172
// Subrecord
173
const ERROR_SUBRECORD_MISSING_COLUMN_ID = 1100;
174

175
// Store
176
177
const ERROR_STORE_VALUE_ALREADY_CODPIED = 1200;
const ERROR_STORE_KEY_EXIST = 1201;
178

179
// I/O Error
180
181
182
183
184
185
186
187
188
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;
189
const ERROR_IO_CREATE_FILE = 1311;
190

191
//Report
192
193
const ERROR_UNKNOWN_LINK_QUALIFIER = 1400;
const ERROR_UNDEFINED_RENDER_CONTROL_COMBINATION = 1401;
194
195
196
197
198
199
200
201
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;
202

203
// Upload
204
const ERROR_UPLOAD = 1500;
205
206
207
208
209
const ERROR_UPLOAD_TOO_BIG = 1501;
const ERROR_UPLOAD_FILE_TYPE = 1502;
const ERROR_UPLOAD_GET_MIME_TYPE = 1503;
const ERROR_UNKNOWN_ACTION = 1504;
const ERROR_NO_TARGET_PATH_FILE_NAME = 1505;
210

Carsten  Rose's avatar
Carsten Rose committed
211
// LDAP
212
const ERROR_LDAP_CONNECT = 1600;
213
const ERROR_MISSING_TYPE_AHEAD_LDAP_SEARCH = 1601;
214
215
const ERROR_MISSING_TYPE_AHEAD_LDAP_SEARCH_PREFETCH = 1602;
const ERROR_LDAP_BIND = 1603;
216

Carsten  Rose's avatar
Carsten Rose committed
217
218
219
220
221
// 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
222
const ERROR_DOWNLOAD_UNEXPECTED_NUMBER_OF_SOURCES = 1704;
Carsten  Rose's avatar
Carsten Rose committed
223

224
225
// KeyValueParser
const ERROR_KVP_VALUE_HAS_NO_KEY = 1900;
226

227
// DB Errors
228
229
230
231
232
233
234
235
236
237
238
239
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;
240
241
242
const ERROR_DB_UNKNOWN_COMMAND = 2012;
const ERROR_DB_MISSING_COLUMN_ID = 2013;
const ERROR_DB_COLUMN_NOT_FOUND_IN_TABLE = 2014;
243
const ERROR_DB_SET_CHARSET = 2015;
Carsten  Rose's avatar
Carsten Rose committed
244
const ERROR_DB_MULTI_QUERY_FAILED = 2016;
Carsten  Rose's avatar
Carsten Rose committed
245
246
247
248

// onArray
const ERROR_SUBSTITUTE_FOUND = 2100;

249
250
251
//
// Store Names: Identifier
//
252
253
const STORE_FORM = "F";  // form, still not saved in database
const STORE_SIP = "S"; // SIP
Carsten  Rose's avatar
Carsten Rose committed
254
const STORE_RECORD = "R"; // selected record from primary table.
255
const STORE_BEFORE = "B"; // selected record from primary table before any modifcations.
256
const STORE_PARENT_RECORD = "P"; // on multi forms the recent record of the outer query (multi).
257
258
const STORE_TABLE_DEFAULT = "D"; // definition of primary table.
const STORE_TABLE_COLUMN_TYPES = "M"; // column types of primary table.
259
const STORE_CLIENT = "C"; // Client: POST variable, if not found: GET variable
260
const STORE_TYPO3 = "T"; // Typo3 > Page content record > bodytext
261
const STORE_VAR = "V"; // Generic Vars
262
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
263
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
264
const STORE_SYSTEM = "Y"; // various system values like db connection credentials
Carsten  Rose's avatar
Carsten Rose committed
265
const STORE_EXTRA = 'X'; // Persistent Store: contains arrays! Not Usefull for user. Used by system.
266
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.
267
const STORE_LDAP = 'L';
268

269
const STORE_USE_DEFAULT = "FSRVD";
270

271
//
Carsten  Rose's avatar
Carsten Rose committed
272
// Store: Definitions / Members
273
274
//

Carsten  Rose's avatar
Carsten Rose committed
275
// URL variables
276
277
const CLIENT_FORM = 'form';
const CLIENT_SIP = 's';
278
const CLIENT_RECORD_ID = 'r';
279
280
const CLIENT_KEY_SEM_ID = 'keySemId';
const CLIENT_KEY_SEM_ID_USER = 'keySemIdUser';
281
282
283
const CLIENT_PAGE_ID = 'id';
const CLIENT_PAGE_TYPE = 'type';
const CLIENT_PAGE_LANGUAGE = 'L';
284
const CLIENT_UPLOAD_FE_NAME = 'name';
Carsten  Rose's avatar
Carsten Rose committed
285

286
287
const CLIENT_SIP_FOR_FORM = '_sipForForm';
const CLIENT_FE_NAME = '_feName';
288
const CLIENT_TYPO3VARS = '_sipForTypo3Vars';
289

290
291
292
293
294
295
296
// 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';
297
const CLIENT_SERVER_ADDRESS = 'SERVER_ADDR';
298
const CLIENT_SERVER_PORT = 'SERVER_PORT';
299
const CLIENT_REMOTE_ADDRESS = 'REMOTE_ADDR';
300
301
302
303
304
305
306
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';

Carsten  Rose's avatar
Carsten Rose committed
307
// T3 Bodytext Keywords
308
const TYPO3_FORM = CLIENT_FORM;
309
const TYPO3_RECORD_ID = CLIENT_RECORD_ID;
310
const TYPO3_BE_USER_LOGGED_IN = 'beUser';   // 'yes' | 'no'
311
312
313
const TYPO3_FE_USER = 'feUser';
const TYPO3_FE_USER_UID = 'feUserUid';
const TYPO3_FE_USER_GROUP = 'feUserGroup';
314
const TYPO3_TT_CONTENT_UID = 'ttcontentUid';
315
316
317
const TYPO3_PAGE_ID = 'pageId';
const TYPO3_PAGE_TYPE = 'pageType';
const TYPO3_PAGE_LANGUAGE = 'pageLanguage';
318
const TYPO3_DEBUG_SHOW_BODY_TEXT = 'debugShowBodyText';
319
320
const TYPO3_SQL_LOG = 'sqlLog';
const TYPO3_SQL_LOG_MODE = 'sqlLogMode';
321

322
// System
323
324
325
326
327
const SYSTEM_DB_USER = 'DB_USER';
const SYSTEM_DB_SERVER = 'DB_SERVER';
const SYSTEM_DB_PASSWORD = 'DB_PASSWORD';
const SYSTEM_DB_NAME = 'DB_NAME';
const SYSTEM_DB_NAME_TEST = 'DB_NAME_TEST';
328
const SYSTEM_DB_INIT = 'DB_INIT';
329
const SYSTEM_SQL_LOG = 'SQL_LOG'; //  Logging to file
330
const SYSTEM_SQL_LOG_FILE = '../../sql.log';
331
const SYSTEM_SQL_LOG_MODE = 'SQL_LOG_MODE'; // Mode, which statements to log.
332
const SYSTEM_DATE_FORMAT = 'DATE_FORMAT';
333
const SYSTEM_REDIRECT_ALL_MAIL_TO = 'REDIRECT_ALL_MAIL_TO';
334
335

const SYSTEM_SHOW_DEBUG_INFO = 'SHOW_DEBUG_INFO';
336
337
338
339
340
const SYSTEM_SHOW_DEBUG_INFO_YES = 'yes';
const SYSTEM_SHOW_DEBUG_INFO_NO = 'no';
const SYSTEM_SHOW_DEBUG_INFO_AUTO = 'auto';
const SYSTEM_SHOW_DEBUG_INFO_DOWNLOAD = 'download';

341
342
const SYSTEM_CSS_LINK_CLASS_INTERNAL = 'CSS_LINK_CLASS_INTERNAL';
const SYSTEM_CSS_LINK_CLASS_EXTERNAL = 'CSS_LINK_CLASS_EXTERNAL';
343
const SYSTEM_CSS_CLASS_QFQ_CONTAINER = 'CSS_CLASS_QFQ_CONTAINER';
344
const SYSTEM_CSS_CLASS_QFQ_FORM = 'CSS_CLASS_QFQ_FORM';
345
346
const SYSTEM_CSS_CLASS_QFQ_FORM_PILL = 'CSS_CLASS_QFQ_FORM_PILL';
const SYSTEM_CSS_CLASS_QFQ_FORM_BODY = 'CSS_CLASS_QFQ_FORM_BODY';
347

348
349
350
351
352
353
// 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';

354
355
const SYSTEM_FORM_BS_COLUMNS = 'FORM_BS_COLUMNS';

356
357
358
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';
359

360
361
const SYSTEM_FORM_BUTTON_ON_CHANGE_CLASS = 'FORM_BUTTON_ON_CHANGE_CLASS';

362
363
364
const SYSTEM_BASE_URL_PRINT = 'BASE_URL_PRINT';
const SYSTEM_WKHTMLTOPDF = 'WKHTMLTOPDF';

365
366
const SYSTEM_EDIT_FORM_PAGE = 'EDIT_FORM_PAGE';

367
368
// computed automatically during runtime
const SYSTEM_PATH_EXT = 'EXT_PATH';
369
const SYSTEM_SITE_PATH = 'SITE_PATH';
370

371
372
373
374
375
376
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
377
const SYSTEM_SECURITY_ATTACK_DELAY_DEFAULT = 5; // Detected attack causes x seconds delay
378
379
380
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;

381
382
const GET_EXTRA_LENGTH_TOKEN = '_';

383
// Not stored in config.qfq.ini, but used in STORE_SYSTEM
384
// Information for: Log / Debug / Exception
Carsten  Rose's avatar
Carsten Rose committed
385
386
387
388
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.
389
390
391
const SYSTEM_FORM = CLIENT_FORM;                        // '<formName> / <formId>'
const SYSTEM_FORM_ELEMENT = 'formElement';              // '<formElementName> / <formElementeId>'
const SYSTEM_FORM_ELEMENT_COLUMN = 'formElementColumn'; // '<columnname of current processed formElement>'
392
const SYSTEM_FORM_ELEMENT_MESSAGE = 'formElementMessage'; // '<columnname of current processed formElement>'
393
394
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.
395
396
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.
Carsten  Rose's avatar
Carsten Rose committed
397
398
399
400
401
402
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#';

403
// die folgenden Elemente sind vermutlich nicht noetig, wenn Store Klassen gloable Vars benutzt.
Carsten  Rose's avatar
Carsten Rose committed
404
405
406
//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.
407

408
409
410
411
412
413
414
const MODE_HTML = 'html';
const MODE_JSON = 'json';

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

415
const SIP_TOKEN_LENGTH = 13; // length of string returned by `uniqid()`
416
417
const SIP_SIP = CLIENT_SIP;  // s
const SIP_RECORD_ID = CLIENT_RECORD_ID; // r
Carsten  Rose's avatar
Carsten Rose committed
418
const SIP_TARGET_URL = '_targetUrl'; // URL where to jump after delete()
419
const SIP_MODE_ANSWER = '_modeAnswer'; // Mode how delete() will answer to client: MODE_HTML, MODE_JSON
420
const SIP_FORM = CLIENT_FORM;
421
const SIP_TABLE = 'table'; // delete a record from 'table'
422
const SIP_URLPARAM = 'urlparam';
423
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
424
425
426
427
const SIP_DOWNLOAD_PARAMETER = '_b64_download'; // Parametername, filled in SIP, to hold all download element parameter.

const SIP_PREFIX_BASE64 = '_b64';

428
429
430
431
432
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
433
// FURTHER: all extracted params from 'urlparam
434

435
436
const ACTION_KEYWORD_SLAVE_ID = 'slaveId';

437
const VAR_RANDOM = 'random';
438
439
440
const VAR_FILE_DESTINATION = 'fileDestination';
const VAR_SLAVE_ID = ACTION_KEYWORD_SLAVE_ID;
const VAR_FILENAME = 'filename'; // Original filename of an uploaded file.
441

442

443
// PHP class DB can operate in these modes
444
445
446
const MODE_DB_REGULAR = 'regular';
const MODE_DB_NO_LOG = 'noLog';

447
// PHP class Typeahead
448
const TYPEAHEAD_API_QUERY = 'query';  // Name of parameter in API call of typeahead.php?query=...&s=... - See also FE_TYPE_AHEAD_SQL
449
const TYPEAHEAD_API_PREFETCH = 'prefetch';  // Name of parameter in API call of typeahead.php?prefetch=...&s=... - See also FE_TYPE_AHEAD_SQL
450
451
const TYPEAHEAD_API_SIP = 'sip';  // Name of parameter in API call of typeahead.php?query=...&s=...
const TYPEAHEAD_DEFAULT_LIMIT = 20;
452
const TYPEAHEAD_SQL_KEY_NAME = 'id';
453

454
455
const DEFAULT_LDAP_TIME_LIMIT = 3;

456
457
const SINGLE_TICK = "'";
const DOUBLE_TICK = '"';
Carsten  Rose's avatar
#2067    
Carsten Rose committed
458

459
// TOKEN evaluate
460
const TOKEN_ESCAPE_CONFIG = 'c';
461
462
const TOKEN_ESCAPE_SINGLE_TICK = 's';
const TOKEN_ESCAPE_DOUBLE_TICK = 'd';
463
464
465
466
const TOKEN_ESCAPE_LDAP_FILTER = 'l';
const TOKEN_ESCAPE_LDAP_DN = 'L';
const TOKEN_ESCAPE_MYSQL = 'm';
const TOKEN_ESCAPE_NONE = '-';
467
468
469
470
471
472
473

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

474
const TOKEN_FOUND_IN_STORE_QUERY = 'query';
475
476
477

const RANDOM_LENGTH = 32;

478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
// Report, BodyText
const TOKEN_SQL = 'sql';
const TOKEN_HEAD = 'head';
const TOKEN_ALT_HEAD = 'althead';
const TOKEN_TAIL = 'tail';
const TOKEN_RBEG = 'rbeg';
const TOKEN_REND = 'rend';
const TOKEN_RENR = 'renr';
const TOKEN_RSEP = 'rsep';
const TOKEN_FBEG = 'fbeg';
const TOKEN_FEND = 'fend';
const TOKEN_FSEP = 'fsep';
const TOKEN_RBGD = 'rbgd';
const TOKEN_DEBUG = 'debug';
const TOKEN_FORM = CLIENT_FORM;
const TOKEN_RECORD_ID = CLIENT_RECORD_ID;
const TOKEN_DEBUG_BODYTEXT = TYPO3_DEBUG_SHOW_BODY_TEXT;

496
const TOKEN_VALID_LIST = 'sql|head|althead|tail|rbeg|rend|renr|rsep|fbeg|fend|fsep|rbgd|debug|form|r|debugShowBodyText|sqlLog|sqlLogMode';
497

498
// FORM - copy from table 'form' of processed form
499
//const DEF_FORM_NAME = CLIENT_FORM;
500
501

// FORMELEMENT - copy of all formElements of processed form
502
//const DEF_FORM_ELEMENT_ID = 'id';
503

504
505
506
// SQL logging Modes
const SQL_LOG_MODE_ALL = 'all';
const SQL_LOG_MODE_MODIFY = 'modify';
507
508
const SQL_LOG_MODE_NONE = 'none';
const SQL_LOG_MODE_ERROR = 'error';
509

510
const MODE_LDAP_PREFETCH = 'ldapPrefetch';
511
512
513
const MODE_LDAP_SINGLE = 'ldapSingle';
const MODE_LDAP_MULTI = 'ldapMulti';

514
// api/save.php, api/delete.php, api/load.php
515
const API_DELETE_PHP = 'delete.php';
Carsten  Rose's avatar
Carsten Rose committed
516
const API_DOWNLOAD_PHP = 'download.php';
517

518
519
520
521
522
523
const API_STATUS = 'status';
const API_MESSAGE = 'message';
const API_REDIRECT = 'redirect';
const API_REDIRECT_URL = 'redirect-url';
const API_FIELD_NAME = 'field-name';
const API_FIELD_MESSAGE = 'field-message';
Carsten  Rose's avatar
Carsten Rose committed
524
const API_FORM_UPDATE = 'form-update';
525
const API_ELEMENT_UPDATE = 'element-update';
526
527
const API_ELEMENT_ATTRIBUTE = 'attr';
const API_ELEMENT_CONTENT = 'content';
528

529
530
531
532
const API_JSON_HIDDEN = 'hidden';
const API_JSON_DISABLED = 'disabled';
const API_JSON_REQUIRED = 'required';

533
534
535
536
537
const API_ANSWER_STATUS_SUCCESS = 'success';
const API_ANSWER_STATUS_ERROR = 'error';
const API_ANSWER_REDIRECT_CLIENT = 'client';
const API_ANSWER_REDIRECT_NO = 'no';
const API_ANSWER_REDIRECT_URL = 'url';
538

539
540
541
542
543
544
545
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
546
const CLASS_TYPEAHEAD = 'qfq-typeahead';
547
const DATA_TYPEAHEAD_SIP = 'data-typeahead-sip'; // Used for typeAhead
548

549

550
551
const CLASS_NOTE = 'qfq-note';

552
553
const DATA_ENABLE_SAVE_BUTTON = 'data-enable-save-button';

Carsten  Rose's avatar
Carsten Rose committed
554
555
556
//const CLASS_TYPEAHEAD = 'qfq-type-ahead';
//const DATA_TYPEAHEAD_SIP = 'data-sip'; // Used for typeAhead

557
558
const DATA_TYPEAHEAD_LIMIT = 'data-typeahead-limit';
const DATA_TYPEAHEAD_MINLENGTH = 'data-typeahead-minlength';
559
const DATA_TYPEAHEAD_PEDANTIC = 'data-typeahead-pedantic';
560

561
562
563
const CLASS_CHARACTER_COUNT = 'qfq-character-count';
const DATA_CHARACTER_COUNT_ID = 'data-character-count-id';

564
565
const CLASS_FORM_ELEMENT_EDIT = 'qfq-form-element-edit';

566
// BuildForm
567
568
const SYMBOL_NEW = 'new';
const SYMBOL_EDIT = 'edit';
569
const SYMBOL_DELETE = 'delete';
570
571
572

//CHECKBOX
const CHECKBOX_VALUE_CHECKED = 'checked';
573
const CHECKBOX_VALUE_UNCHECKED = 'unchecked';
574
//const CHECKBOX_ORIENTATION = 'orientation';
575

576
577
578
const ALIGN_HORIZONTAL = 'horizontal';
const ALIGN_VERTICAL = 'vertical';

579
580
581
582
583
// Subrecord
const SUBRECORD_COLUMN_WIDTH = 20;
const FORM_ELEMENTS_NATIVE = 'native';
const FORM_ELEMENTS_SUBRECORD = 'subrecord';
const FORM_ELEMENTS_NATIVE_SUBRECORD = 'native_subrecord';
Carsten  Rose's avatar
Carsten Rose committed
584
//const FORM_ELEMENTS_DYNAMIC_UPDATE = 'native_dynamic_update';
585
586
587
588
589
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';
590
591
const SUBRECORD_PARAMETER_DETAIL = 'detail';

592
const GLYPH_ICON = 'glyphicon';
593
594
595
const GLYPH_ICON_EDIT = 'glyphicon-pencil';
const GLYPH_ICON_NEW = 'glyphicon-plus';
const GLYPH_ICON_DELETE = 'glyphicon-trash';
596
597
598
const GLYPH_ICON_HELP = 'glyphicon-question-sign';
const GLYPH_ICON_INFO = 'glyphicon-info-sign';
const GLYPH_ICON_SHOW = 'glyphicon-search';
599
const GLYPH_ICON_TOOL = 'glyphicon-wrench';
600
601
const GLYPH_ICON_CHECK = 'glyphicon-ok';
const GLYPH_ICON_CLOSE = 'glyphicon-remove';
602
const GLYPH_ICON_TASKS = 'glyphicon-tasks';
Carsten  Rose's avatar
Carsten Rose committed
603
const GLYPH_ICON_VIEW = 'glyphicon-eye-open';
Carsten  Rose's avatar
Carsten Rose committed
604
const GLYPH_ICON_FILE = 'glyphicon-file';
605

606
// FORM
607
const F_ID = 'id';
608
const F_NAME = 'name';
609
const F_TITLE = 'title';
610
const F_TABLE_NAME = 'tableName';
611
const F_REQUIRED_PARAMETER = 'requiredParameter';
612
613
const F_EXTRA_DELETE_FORM = 'extraDeleteForm';
const F_FINAL_DELETE_FORM = 'finalDeleteForm';
614

615
const F_SUBMIT_BUTTON_TEXT = 'submitButtonText';
616
const F_BUTTON_ON_CHANGE_CLASS = 'buttonOnChangeClass';
617

618
619
const F_ESCAPE_TYPE_DEFAULT = 'escapeTypeDefault';

620
const F_CLASS = 'class';
621
622
623
const F_CLASS_PILL = 'classPill';
const F_CLASS_BODY = 'classBody';

Carsten  Rose's avatar
Carsten Rose committed
624
625
const F_SHOW_BUTTON = 'showButton';

626
627
628
629
630
631
632
const F_FORWARD_MODE = 'forwardMode';
const F_FORWARD_PAGE = 'forwardPage';

const F_FORWARD_MODE_CLIENT = 'client';
const F_FORWARD_MODE_NO = 'no';
const F_FORWARD_MODE_PAGE = 'page';

633
634
635
636
637
const F_FE_DATA_PATTERN_ERROR = 'data-pattern-error';
const F_FE_DATA_REQUIRED_ERROR = 'data-required-error';
const F_FE_DATA_MATCH_ERROR = 'data-match-error';
const F_FE_DATA_ERROR = 'data-error';

638
639
const F_PARAMETER = 'parameter';    // valid for F_ and FE_

640
641
642
const F_LDAP_SERVER = 'ldapServer';
const F_LDAP_BASE_DN = 'ldapBaseDn';
const F_LDAP_SEARCH = 'ldapSearch';
643
644
const F_LDAP_ATTRIBUTES = 'ldapAttributes';
const F_LDAP_TIME_LIMIT = 'ldapTimeLimit';
645
const F_LDAP_USE_BIND_CREDENTIALS = 'ldapUseBindCredentials';
646
647
const F_TYPEAHEAD_LIMIT = 'typeAheadLimit';
const F_TYPEAHEAD_MINLENGTH = 'typeAheadMinLength';
648
const F_TYPEAHEAD_PEDANTIC = 'typeAheadPedantic';
649
const F_TYPEAHEAD_LDAP_VALUE_PRINTF = 'typeAheadLdapValuePrintf';
650
const F_TYPEAHEAD_LDAP_ID_PRINTF = 'typeAheadLdapIdPrintf';
651
const F_TYPEAHEAD_LDAP_SEARCH = 'typeAheadLdapSearch';
652
const F_TYPEAHEAD_LDAP_SEARCH_PREFETCH = 'typeAheadLdapSearchPrefetch';
653
const F_TYPEAHEAD_LDAP_SEARCH_PER_TOKEN = 'typeAheadLdapSearchPerToken';
654

Carsten  Rose's avatar
Carsten Rose committed
655
656
657
const F_MODE = 'mode';
const F_MODE_READONLY = 'readonly';

658
659
const F_SAVE_BUTTON_ACTIVE = 'saveButtonActive';

660
661
662
663
// FORM_ELEMENT_STATI
const FE_MODE_SHOW = 'show';
const FE_MODE_READONLY = 'readonly';
const FE_MODE_REQUIRED = 'required';
664
const FE_MODE_HIDDEN = 'hidden';
665

666
667
668
669
const FE_CLASS_NATIVE = 'native';
const FE_CLASS_ACTION = 'action';
const FE_CLASS_CONTAINER = 'container';

670
const FE_SUBRECORD_ROW_CLASS = '_rowClass';
671
const FE_SUBRECORD_ROW_TITLE = '_rowTitle';
672

673
// FormElement columns: real
674
const FE_ID = 'id';
Carsten  Rose's avatar
Carsten Rose committed
675
const FE_ID_CONTAINER = 'feIdContainer';
Carsten  Rose's avatar
Carsten Rose committed
676
const FE_FORM_ID = 'formId';
677
const FE_NAME = 'name';
678
const FE_TYPE = 'type';
679
const FE_MODE = 'mode';
680
const FE_MODE_SQL = 'modeSql';
681
const FE_DYNAMIC_UPDATE = 'dynamicUpdate';
682
const FE_VALUE = 'value';
683
const FE_CLASS = 'class';
684
685
const FE_LABEL = 'label';
const FE_NOTE = 'note';
686
687
688
689
690
const FE_BS_LABEL_COLUMNS = F_BS_LABEL_COLUMNS;
const FE_BS_INPUT_COLUMNS = F_BS_INPUT_COLUMNS;
const FE_BS_NOTE_COLUMNS = F_BS_NOTE_COLUMNS;
const FE_WRAP_ROW_LABEL_INPUT_NOW = 'rowLabelInputNote';
const FE_MAX_LENGTH = 'maxLength';
691
const FE_PARAMETER = 'parameter';
692
693
694
const FE_ENCODE = 'encode';
const FE_CHECK_TYPE = 'checkType';
const FE_CHECK_PATTERN = 'checkPattern';
695

696
697
698
699
// FormElement columns: via parameter field
const FE_DATE_FORMAT = 'dateFormat';  // value: FORMAT_DATE_INTERNATIONAL | FORMAT_DATE_GERMAN
const FE_SHOW_SECONDS = 'showSeconds';  // value: 0|1
const FE_SHOW_ZERO = 'showZero';  // value: 0|1
700
const FE_FILE_DESTINATION = 'fileDestination'; // Target pathFilename for an uploaded file.
701
702
const FE_FILE_REPLACE_MODE = 'fileReplace'; // Target pathFilename for an uploaded file.
const FE_FILE_REPLACE_MODE_ALWAYS = 'always'; // Target pathFilename for an uploaded file.
703
704
const FE_FILE_MIME_TYPE_ACCEPT = 'accept'; // Target pathFilename for an uploaded file.
const FE_FILE_MAX_FILE_SIZE = 'maxFileSize'; // Target pathFilename for an uploaded file.
705
const FE_FILE_CAPTURE = 'capture'; // On a smartphone opens the camera
706
707
708
const FE_SQL_VALIDATE = 'sqlValidate'; // Action: Query to validate form load
const FE_EXPECT_RECORDS = 'expectRecords'; // Action: expected number of rows of FE_SQL_VALIDATE
const FE_MESSAGE_FAIL = 'messageFail'; // Action: Message to display, if FE_SQL_VALIDATE fails.
709
const FE_REQUIRED_LIST = 'requiredList'; // Optional list of FormElements which have to be non empty to make this 'action'-FormElement active.
710
const FE_SLAVE_ID = 'slaveId'; // Action; Value or Query to compute id of slave record.
711
712
const FE_SQL_AFTER = 'sqlAfter'; // Action: Always fired
const FE_SQL_BEFORE = 'sqlBefore'; // Action: Always fired
713
714
715
const FE_SQL_UPDATE = 'sqlUpdate'; // Action: Update Statement for slave record
const FE_SQL_INSERT = 'sqlInsert'; // Action: Insert Statement to create slave record.
const FE_SQL_DELETE = 'sqlDelete'; // Action: Delete Statement to delete unused slave record.
716
const FE_SQL_HONOR_FORM_ELEMENTS = 'sqlHonorFormElements'; // Action: Honor given list of FormElements for sqlInsert|Update|Delete
Carsten  Rose's avatar
Carsten Rose committed
717
const FE_EDITOR_PREFIX = 'editor-'; // TinyMCE configuration settings.
718
719
720
721
722
723
724
725
726
const FE_SENDMAIL_TO = 'sendMailTo'; // Receiver email adresses. Separate multiple by comma.
const FE_SENDMAIL_CC = 'sendMailCc'; // CC Receiver email adresses. Separate multiple by comma.
const FE_SENDMAIL_BCC = 'sendMailBcc'; // BCC Receiver email adresses. Separate multiple by comma.
const FE_SENDMAIL_FROM = 'sendMailFrom'; // Sender email address.
const FE_SENDMAIL_SUBJECT = 'sendMailSubject'; // Email subject
const FE_SENDMAIL_REPLY_TO = 'sendMailReplyTo'; // Reply to email address
const FE_SENDMAIL_FLAG_AUTO_SUBMIT = 'sendMailFlagAutoSubmit'; // on|off - if 'on', suppresses OoO answers from receivers.
const FE_SENDMAIL_GR_ID = 'sendMailGrId'; // gr_id: used to classify mail log entries ind table mailLog
const FE_SENDMAIL_X_ID = 'sendMailXId'; // x_id: used to classify mail log entries ind table mailLog
727
const FE_AUTOFOCUS = 'autofocus'; // value: <none>|0|1  , <none>==1, this element becomes the focus during form load.
728
729
730
const FE_RETYPE = 'retype'; // value: <none>|0|1  , <none>==1, this element becomes the focus during form load.
const FE_RETYPE_LABEL = 'retypeLabel'; // value: label text for retype FormElement
const FE_RETYPE_NOTE = 'retypeNote'; // value: note text for retype FormElement
731
const FE_RETYPE_SOURCE_NAME = '_retypeSourceName'; // QFQ internal reference to name of source FormElement.
732
733
734
735
const FE_WRAP_ROW = 'wrapRow';
const FE_WRAP_LABEL = 'wrapLabel';
const FE_WRAP_INPUT = 'wrapInput';
const FE_WRAP_NOTE = 'wrapNote';
736
737
738
739
740
741
742
const FE_HTML_BEFORE = 'htmlBefore';
const FE_HTML_AFTER = 'htmlAfter';
const FE_TEMPLATE_GROUP_ADD_CLASS = 'tgAddClass';
const FE_TEMPLATE_GROUP_ADD_TEXT = 'tgAddText';
const FE_TEMPLATE_GROUP_REMOVE_CLASS = 'tgRemoveClass';
const FE_TEMPLATE_GROUP_REMOVE_TEXT = 'tgRemoveText';
const FE_TEMPLATE_GROUP_CLASS = 'tgClass';
Carsten  Rose's avatar
Carsten Rose committed
743
const FE_TEMPLATE_GROUP_DEFAULT_MAX_LENGTH = 5;
744
const FE_TEMPLATE_GROUP_NAME_PATTERN = '%d';
745
const FE_TEMPLATE_GROUP_NAME_PATTERN_0 = '%D';
746
const FE_TEMPLATE_GROUP_CURRENT_IDX = 'tgCurentIndex';
747
const FE_BUTTON_CLASS = 'buttonClass';
748
749
750
const FE_LDAP_SERVER = F_LDAP_SERVER;
const FE_LDAP_BASE_DN = F_LDAP_BASE_DN;
const FE_LDAP_SEARCH = F_LDAP_SEARCH;
751
752
const FE_LDAP_ATTRIBUTES = F_LDAP_ATTRIBUTES;
const FE_LDAP_TIME_LIMIT = F_LDAP_TIME_LIMIT;
753
const FE_LDAP_USE_BIND_CREDENTIALS = F_LDAP_USE_BIND_CREDENTIALS;
754
755
const FE_TYPEAHEAD_LIMIT = F_TYPEAHEAD_LIMIT;
const FE_TYPEAHEAD_MINLENGTH = F_TYPEAHEAD_MINLENGTH;
756
const FE_TYPEAHEAD_PEDANTIC = F_TYPEAHEAD_PEDANTIC;
757
const FE_TYPEAHEAD_SQL = 'typeAheadSql';
758
const FE_TYPEAHEAD_LDAP_VALUE_PRINTF = F_TYPEAHEAD_LDAP_VALUE_PRINTF;
759
const FE_TYPEAHEAD_LDAP_ID_PRINTF = F_TYPEAHEAD_LDAP_ID_PRINTF;
760
const FE_TYPEAHEAD_LDAP = 'typeAheadLdap';
761
const FE_TYPEAHEAD_LDAP_SEARCH = F_TYPEAHEAD_LDAP_SEARCH;
762
const FE_TYPEAHEAD_LDAP_SEARCH_PREFETCH = F_TYPEAHEAD_LDAP_SEARCH_PREFETCH;
763
const FE_TYPEAHEAD_LDAP_SEARCH_PER_TOKEN = F_TYPEAHEAD_LDAP_SEARCH_PER_TOKEN;
764
const FE_FILL_STORE_LDAP = 'fillStoreLdap';
765
const FE_CHARACTER_COUNT_WRAP = 'characterCountWrap';
766
767
768
const FE_INPUT_EXTRA_BUTTON_LOCK = 'extraButtonLock';
const FE_INPUT_EXTRA_BUTTON_PASSWORD = 'extraButtonPassword';
const FE_INPUT_EXTRA_BUTTON_INFO = 'extraButtonInfo';
769
const FE_TMP_EXTRA_BUTTON_HTML = '_extraButtonHtml'; // will be filled on the fly during building extrabutton
770

771
const RETYPE_FE_NAME_EXTENSION = 'RETYPE';
772

773
774
const TYPEAHEAD_PLACEHOLDER = '?';

775
776
const FE_HTML_ID = 'htmlId'; // Will be dynamically computed during runtime.

777
778
779
// Values
const FE_ENCODE_SPECIALCHAR = 'specialchar';
const FE_ENCODE_NONE = 'none';
780
const FE_FILE_CAPTURE_CAMERA = 'camera';
781

782
// FormElement Types
783
784
785
786
787
788
789
790
791
const FE_TYPE_CHECKBOX = 'checkbox';
const FE_TYPE_DATE = 'date';
const FE_TYPE_TIME = 'time';
const FE_TYPE_DATETIME = 'datetime';
const FE_TYPE_TEXT = 'text';
const FE_TYPE_EDITOR = 'editor';
const FE_TYPE_PASSWORD = 'password';
const FE_TYPE_RADIO = 'radio';
const FE_TYPE_SELECT = 'select';
792
const FE_TYPE_UPLOAD = 'upload';
793
const FE_TYPE_EXTRA = 'extra';
794
795
796
const FE_TYPE_SUBRECORD = 'subrecord';
const FE_TYPE_NOTE = 'note';

797

798
const FE_TYPE_SENDMAIL = 'sendMail';
799
800
801
802
803
804
805
806
807
808
809
const FE_TYPE_BEFORE_LOAD = 'beforeLoad';
const FE_TYPE_BEFORE_SAVE = 'beforeSave';
const FE_TYPE_BEFORE_INSERT = 'beforeInsert';
const FE_TYPE_BEFORE_UPDATE = 'beforeUpdate';
const FE_TYPE_BEFORE_DELETE = 'beforeDelete';
const FE_TYPE_AFTER_LOAD = 'afterLoad';
const FE_TYPE_AFTER_SAVE = 'afterSave';
const FE_TYPE_AFTER_INSERT = 'afterInsert';
const FE_TYPE_AFTER_UPDATE = 'afterUpdate';
const FE_TYPE_AFTER_DELETE = 'afterDelete';

810
811
const FE_TYPE_TEMPLATE_GROUP = 'templateGroup';

812
813
// SUPPORT
const PARAM_T3_ALL = 't3 all';
814
const PARAM_T3_NO_ID = "t3 no id";
815
816
const ESCAPE_WITH_BACKSLASH = 'backslash';
const ESCAPE_WITH_HTML_QUOTE = 'htmlquote';
817
818
819
820
821

// AbstractBuildForm
const FLAG_ALL = 'flagAll';
const FLAG_DYNAMIC_UPDATE = 'flagDynamicUpdate';

822
823
824
const HTML_DELIMITER_NAME = '-';
const HTML_DELIMITER_ID = HTML_DELIMITER_NAME;

825
826
827
828
829
const HTML_ID_EXTENSION_LABEL = '-l';
const HTML_ID_EXTENSION_INPUT = '-i';
const HTML_ID_EXTENSION_NOTE = '-n';
const HTML_ID_EXTENSION_TOOLTIP = '-t';
const HTML_ID_EXTENSION_ROW = '-r';
830
const HTML_ID_EXTENSION_CHARACTER_COUNT = '-cc';
831

832
833
const QUERY_TYPE_SELECT = 'type: select,show,describe,explain';
const QUERY_TYPE_INSERT = 'type: insert';
834
const QUERY_TYPE_UPDATE = 'type: update,replace,delete';
835
const QUERY_TYPE_CONTROL = 'type: set';
836
837

//Regexp
838
839
840
841
842
843
844
845
//const REGEXP_DATE_INT = '^\d{4}-\d{2}-\d{2}$';
//const REGEXP_DATE_GER = '^\d{1,2}\.\d{1,2}\.\d{2}(\d{2})?$';
//const REGEXP_TIME = '^\d{1,2}:\d{1,2}(:\d{1,2})?$';


// Date/ DateTime formats
const FORMAT_DATE_INTERNATIONAL = 'yyyy-mm-dd';
const FORMAT_DATE_GERMAN = 'dd.mm.yyyy';
846

847
848
849
850
851
// Upload
const UPLOAD_MODE_UNCHANGED = 'unchanged';
const UPLOAD_MODE_NEW = 'new';
const UPLOAD_MODE_DELETEOLD = 'deleteOld';
const UPLOAD_MODE_DELETEOLD_NEW = 'deleteOld+new';
852
853
const UPLOAD_DEFAULT_MAX_SIZE = 10485760; /* 10MB */
const UPLOAD_DEFAULT_MIME_TYPE = 'application/pdf';
854
855
856
857
858
// $_FILES
const FILES_NAME = 'name';
const FILES_TMP_NAME = 'tmp_name';
const FILES_ERROR = 'error';
const FILES_SIZE = 'size';
859
const FILES_FLAG_DELETE = 'flagDelete';
Carsten  Rose's avatar
Carsten Rose committed
860

861
862
863
const UPLOAD_CACHED = '.cached';
const FILE_ACTION = 'action';
const FILE_ACTION_UPLOAD = 'upload';
864
865
866
867
868
869
870
const FILE_ACTION_DELETE = 'delete';

// DATABASE
const DB_NUM_ROWS = 'numRows';
const DB_AFFECTED_ROWS = 'affectedRows';
const DB_INSERT_ID = 'insertId';

871
const COLUMN_CREATED = 'created';
872
const COLUMN_MODIFIED = 'modified';
873

Carsten  Rose's avatar
Carsten Rose committed
874
875
const INDEX_PHP = 'index.php';

876
877
878
879
// QuickFormQuery.php
const T3DATA_BODYTEXT = 'bodytext';
const T3DATA_UID = 'uid';

880
881
// Special Column to check for uploads
const COLUMN_PATH_FILE_NAME = 'pathFileName';
Carsten  Rose's avatar
Upload:    
Carsten Rose committed
882
883
884

// Used to in SIP Store to handle 'delete' after upload
const EXISTING_PATH_FILE_NAME = '_existingPathFileName';
885
886
887
888
889
890
891
892
893
894
895
896
897

//SENDMAIL
const SENDMAIL_IDX_RECEIVER = 0;
const SENDMAIL_IDX_SENDER = 1;
const SENDMAIL_IDX_SUBJECT = 2;
const SENDMAIL_IDX_BODY = 3;
const SENDMAIL_IDX_REPLY_TO = 4;
const SENDMAIL_IDX_FLAG_AUTO_SUBMIT = 5;
const SENDMAIL_IDX_GR_ID = 6;
const SENDMAIL_IDX_X_ID = 7;
const SENDMAIL_IDX_RECEIVER_CC = 8;
const SENDMAIL_IDX_RECEIVER_BCC = 9;
const SENDMAIL_IDX_SRC = 10;
898
899
900
901
902
903
904
905
906
907

//Report: Column Token
const COLUMN_PPAGE = "Page";
const COLUMN_PPAGEC = "Pagec";
const COLUMN_PPAGED = "Paged";
const COLUMN_PPAGEE = "Pagee";
const COLUMN_PPAGEH = "Pageh";
const COLUMN_PPAGEI = "Pagei";
const COLUMN_PPAGEN = "Pagen";
const COLUMN_PPAGES = "Pages";
908
909
910
const COLUMN_PPDF = "Pdf";
const COLUMN_ZZIP = "Zip";
const COLUMN_FFILE = "File";
911
912
913
914
915
916
917
918

const COLUMN_PAGE = "page";
const COLUMN_PAGEC = "pagec";
const COLUMN_PAGED = "paged";
const COLUMN_PAGEE = "pagee";
const COLUMN_PAGEH = "pageh";
const COLUMN_PAGEI = "pagei";
const COLUMN_PAGEN = "pagen";
919
const COLUMN_PAGES = "pages";