Commit ccee1f41 authored by Elias Villiger's avatar Elias Villiger
Browse files

Merge branch 'master' into 6465-newline-in-action-query

parents bcee564e 7d13df4c
Pipeline #838 passed with stage
in 1 minute and 53 seconds
This diff is collapsed.
...@@ -43,12 +43,12 @@ Neue Versionsnummer ...@@ -43,12 +43,12 @@ Neue Versionsnummer
* Update the version number in this document (topic 6) * Update the version number in this document (topic 6)
* Commit & Push new version changes to master branch: * Commit & Push new version changes to master branch:
New version x.y.z. New version 18.8.2
6) **New Tag**: 6) **New Tag**:
git tag v18.6.1 git tag v18.8.2
git push -u origin v18.6.1 git push -u origin v18.8.2
7) PhpStorm: **Sync** all files to VM qfq. 7) PhpStorm: **Sync** all files to VM qfq.
......
This diff is collapsed.
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
Release Release
======= =======
Version 0.future Version 18.x.x
---------------- --------------
Date: <date> Date: <date>
...@@ -36,6 +36,82 @@ Features ...@@ -36,6 +36,82 @@ Features
Bug Fixes Bug Fixes
^^^^^^^^^ ^^^^^^^^^
Version 18.8.2
--------------
Date: 28.8.18
Features
^^^^^^^^
* F6563 / Accept 0 as required.
Bug Fixes
^^^^^^^^^
* DatabaseUpdateData.php: add missed 'on the fly' update for Form.title, changed in FormEditor.sql in 18.8.1
* 6562 / sendmail: redirect all mail - the sender is replaced too.
* Manual.rst: several typos fixed
Version 18.8.1
---------------
Date: 26.08.2018
Features
^^^^^^^^
* #4432 / Every 'form submit' will be logged with raw data.
* #4763 / Render vertical text more stable: '... AS _vertical'
* #4996 / Log QFQ Version update
* #5403 / Tooltip on pills are now supported
* #5876 / Subrecord title of column 'Edit' & 'Delete' are now customizable.
* #6249 / Subrecords can now be reordered via drag and drop.
* #6333 / Add to qfq.log: IP Address, User Agent, QFQ Cookie, FE User
Bug Fixes
^^^^^^^^^
* #6401 / Handle Backticks in sendmail
* #6452 / Empty form title: no title row will be rendered anymore.
Version 18.8.0
--------------
Date: 25.08.2018
Notes
^^^^^
* Excel export
* Copy to clipboard
Features
^^^^^^^^
* #4922 / Excel Export - create Excel sheets from scratch or based on a template.
* #3294 / Improve Typo3 QFQ backend layout. Add sparql syntax highlighting.
* #5878 / Formelement.type=note with #!report - whitespace is trimmed.
* #6314 / HTML Mails enabled by specifying flag 'mode=html'.
* Import/Merge form: A new form 'copyFormFromExt' (see file `copyFormFromExt.sql`) offers a one click import of external
QFQ forms (incl. renumbering of id's).
* formEditor.sql: resized Form.title from 255 to 511 (requested by IK Tool)
* Drag and Drop now offers the possibility to show the renumbered values.
* Manual.rst: security hints, T3 Setup best practice, text input retype, charactercountwrap.
* Config.qfq: central defaults for DATA_MATCH, DATA_ERROR
* Bootstrap QFQ development: switched from bower to npm only.
Bug Fixes
^^^^^^^^^
* #5843 / File upload: limitation to file extensions are no case insensitive.
* #6247 / Replace deprecated each function
* #6281 / FormElement / column 'note': token '#!report' - STORE_RECORD does not work.
* #6331 / File Upload: Wrong error message if filesize is much too big.
* #6229 / Add QFQ icon to content element and content element wizard
* AbstractException.php: fixed problem with htmlEntities() on link to 'Edit Form' and 'Edit FormElement'.
Version 18.6.1 Version 18.6.1
-------------- --------------
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
[general] [general]
project = QFQ - Quick Form Query project = QFQ - Quick Form Query
version = 18.6 version = 18.8
release = 18.6.1 release = 18.8.2
t3author = Carsten Rose t3author = Carsten Rose
copyright = since 2017 by the author copyright = since 2017 by the author
......
...@@ -57,9 +57,9 @@ copyright = u'2017, Carsten Rose' ...@@ -57,9 +57,9 @@ copyright = u'2017, Carsten Rose'
# built documents.lease # built documents.lease
# #
# The short X.Y version. # The short X.Y version.
version = '18.6' version = '18.8'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = '18.6.1' release = '18.8.2'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
......
This diff is collapsed.
...@@ -60,6 +60,9 @@ sqlLogMode = modify ...@@ -60,6 +60,9 @@ sqlLogMode = modify
# cat=debug/sql; type=string; label=SQL log file:Default is 'fileadmin/protected/log/sql.log'. A logfile of fired SQL statements. PathFile is absolute or relative to '<site path>'. # cat=debug/sql; type=string; label=SQL log file:Default is 'fileadmin/protected/log/sql.log'. A logfile of fired SQL statements. PathFile is absolute or relative to '<site path>'.
sqlLog = fileadmin/protected/log/sql.log sqlLog = fileadmin/protected/log/sql.log
# cat=debug/form; type=string; label=Form submit log mode:Default is 'all'. Form submit requests will be logged in the table FormSubmitLog. Possible modes are 'all' - every form save will be logged. 'none' - no logging. This setting can also be changed per form.
formSubmitLogMode = all
# cat=debug/mail; type=string; label=Mail log file:Default is 'fileadmin/protected/log/mail.log'. A logfile of sent mail. PathFile is absolute or relative to '<site path>'. # cat=debug/mail; type=string; label=Mail log file:Default is 'fileadmin/protected/log/mail.log'. A logfile of sent mail. PathFile is absolute or relative to '<site path>'.
mailLog = fileadmin/protected/log/mail.log mailLog = fileadmin/protected/log/mail.log
......
...@@ -11,7 +11,7 @@ $EM_CONF[$_EXTKEY] = array( ...@@ -11,7 +11,7 @@ $EM_CONF[$_EXTKEY] = array(
'dependencies' => 'fluid,extbase', 'dependencies' => 'fluid,extbase',
'clearcacheonload' => true, 'clearcacheonload' => true,
'state' => 'stable', 'state' => 'stable',
'version' => '18.6.1', 'version' => '18.8.2',
'constraints' => [ 'constraints' => [
'depends' => [ 'depends' => [
'typo3' => '6.0.0-9.2.99', 'typo3' => '6.0.0-9.2.99',
......
...@@ -43,12 +43,12 @@ require_once(__DIR__ . '/../qfq/exceptions/CodeException.php'); ...@@ -43,12 +43,12 @@ require_once(__DIR__ . '/../qfq/exceptions/CodeException.php');
* *
* Description: * Description:
* *
* Delete successfull. * Delete successful.
* status = 'success' * status = 'success'
* message = <message> * message = <message>
* redirect = 'client' * redirect = 'client'
* *
* Delete successfull. * Delete successful.
* status = 'success' * status = 'success'
* message = <message> * message = <message>
* redirect = 'url' * redirect = 'url'
......
...@@ -59,12 +59,14 @@ try { ...@@ -59,12 +59,14 @@ try {
$qfq = new QuickFormQuery(['bodytext' => '']); $qfq = new QuickFormQuery(['bodytext' => '']);
$data = $qfq->dragAndDrop(); $data = $qfq->dragAndDrop();
$answer = array_merge($data, $answer);
$answer[API_STATUS] = API_ANSWER_STATUS_SUCCESS; $answer[API_STATUS] = API_ANSWER_STATUS_SUCCESS;
$answer[API_MESSAGE] = 'reorder: success'; $answer[API_MESSAGE] = 'reorder: success';
// $answer[API_FORM_UPDATE] = $data[API_FORM_UPDATE]; // $answer[API_FORM_UPDATE] = $data[API_FORM_UPDATE];
// $answer[API_ELEMENT_UPDATE] = $data[API_ELEMENT_UPDATE]; // $answer[API_ELEMENT_UPDATE] = $data[API_ELEMENT_UPDATE];
// unset($answer[API_FORM_UPDATE][API_ELEMENT_UPDATE]); // unset($answer[API_FORM_UPDATE][API_ELEMENT_UPDATE]);
// $answer[API_ELEMENT_UPDATE] = [ 'dynamic-125' => [ 'content' => 'latest news', 'attr' => [ 'title' => 'latest title'] ] ];
} catch (qfq\UserFormException $e) { } catch (qfq\UserFormException $e) {
$answer[API_MESSAGE] = $e->formatMessage(); $answer[API_MESSAGE] = $e->formatMessage();
......
...@@ -13,6 +13,8 @@ use qfq; ...@@ -13,6 +13,8 @@ use qfq;
require_once(__DIR__ . '/../qfq/store/Store.php'); require_once(__DIR__ . '/../qfq/store/Store.php');
require_once(__DIR__ . '/../qfq/Constants.php'); require_once(__DIR__ . '/../qfq/Constants.php');
require_once(__DIR__ . '/../qfq/File.php'); require_once(__DIR__ . '/../qfq/File.php');
require_once(__DIR__ . '/../qfq/exceptions/UserFormException.php');
require_once(__DIR__ . '/../qfq/exceptions/CodeException.php');
/** /**
* Process File Upload - immediately when the the user selects a file. * Process File Upload - immediately when the the user selects a file.
...@@ -23,7 +25,7 @@ require_once(__DIR__ . '/../qfq/File.php'); ...@@ -23,7 +25,7 @@ require_once(__DIR__ . '/../qfq/File.php');
* *
* Description: * Description:
* *
* Upload successfull & File accepted by server. * Upload successful & File accepted by server.
* status = 'success' * status = 'success'
* message = <message> * message = <message>
* *
......
...@@ -59,6 +59,11 @@ try { ...@@ -59,6 +59,11 @@ try {
$data = $qfq->saveForm(); $data = $qfq->saveForm();
if (isset($data[REPORT_SAVE])) {
// Redirect to previous page
header("Location: {$_SERVER['HTTP_REFERER']}");
}
$arr = $qfq->getForwardMode(); $arr = $qfq->getForwardMode();
$answer[API_REDIRECT] = $arr[API_REDIRECT]; $answer[API_REDIRECT] = $arr[API_REDIRECT];
$answer[API_REDIRECT_URL] = $arr[API_REDIRECT_URL]; $answer[API_REDIRECT_URL] = $arr[API_REDIRECT_URL];
......
...@@ -2337,14 +2337,14 @@ abstract class AbstractBuildForm { ...@@ -2337,14 +2337,14 @@ abstract class AbstractBuildForm {
/** /**
* @param string $linkNew Complete Button, incl. SIP href * @param string $linkNew Complete Button, incl. SIP href
* @param bool $flagDelete Flag to show if there is columns 'delete' rendered. * @param string $deleteColumnTitle - if null, no delete column is rendered
* @param array $firstRow First row of all subrecords to extract columntitles * @param array $firstRow First row of all subrecords to extract columntitles
* @param array $control Array with <th> column names / format. * @param array $control Array with <th> column names / format.
* *
* @return string * @return string
* @throws UserFormException * @throws UserFormException
*/ */
private function subrecordHead($linkNew, $flagDelete, array $firstRow, array &$control) { private function subrecordHead($linkNew, $flagDelete, $deleteTitle, array $firstRow, array &$control) {
$columns = $linkNew; $columns = $linkNew;
...@@ -2357,7 +2357,7 @@ abstract class AbstractBuildForm { ...@@ -2357,7 +2357,7 @@ abstract class AbstractBuildForm {
} }
if ($flagDelete) { if ($flagDelete) {
$columns .= '<th></th>'; $columns .= "<th>$deleteTitle</th>";
} }
return Support::wrapTag('<thead><tr>', $columns); return Support::wrapTag('<thead><tr>', $columns);
...@@ -2407,11 +2407,38 @@ abstract class AbstractBuildForm { ...@@ -2407,11 +2407,38 @@ abstract class AbstractBuildForm {
$flagEdit = Support::findInSet(SUBRECORD_EDIT, $formElement[FE_SUBRECORD_OPTION]); $flagEdit = Support::findInSet(SUBRECORD_EDIT, $formElement[FE_SUBRECORD_OPTION]);
$flagDelete = Support::findInSet(SUBRECORD_DELETE, $formElement[FE_SUBRECORD_OPTION]) && ($formElement[FE_MODE] != FE_MODE_READONLY); $flagDelete = Support::findInSet(SUBRECORD_DELETE, $formElement[FE_SUBRECORD_OPTION]) && ($formElement[FE_MODE] != FE_MODE_READONLY);
$linkNew = $flagNew ? Support::wrapTag('<th>', $this->createFormLink($formElement, 0, $primaryRecord, $this->symbol[SYMBOL_NEW], 'New')) : '<th></th>'; $editColumnTitle = $flagNew ? $this->createFormLink($formElement, 0, $primaryRecord, $this->symbol[SYMBOL_NEW], 'New') : '';
$editColumnTitle .= ' ' . $formElement[SUBRECORD_COLUMN_TITLE_EDIT];
$linkNew = Support::wrapTag('<th>', $editColumnTitle);
}
// Determine if DragAndDrop is active
$hasDragAndDrop = false;
$orderColumn = $formElement[FE_ORDER_COLUMN] ?? DND_COLUMN_ORD;
$dndTable = '';
if (isset($formElement[FE_DND_TABLE])) {
// Table is specified in parameter field
$dndTable = $formElement[FE_DND_TABLE];
} else {
// Read table from form specified in subrecord
$formName = $formElement[SUBRECORD_PARAMETER_FORM];
$form = $this->dbArray[$this->dbIndexQfq]->sql("SELECT * FROM Form AS f WHERE f." . F_NAME . " LIKE ? AND f.deleted='no'",
ROW_REGULAR, [$formName]);
if (count($form) > 0) { $dndTable = $form[0][F_TABLE_NAME]; }
}
if ($dndTable) {
$columns = $this->dbArray[$this->dbIndexQfq]->sql("SHOW COLUMNS FROM $dndTable");
foreach ($columns as $column) {
if ($column['Field'] === $orderColumn) {
// DragAndDrop is active if the dndTable has the orderColumn
$hasDragAndDrop = true;
break;
}
}
} }
$firstRow = isset($formElement[FE_SQL1][0]) ? $formElement[FE_SQL1][0] : array(); $firstRow = isset($formElement[FE_SQL1][0]) ? $formElement[FE_SQL1][0] : array();
$htmlHead = $this->subrecordHead($linkNew, $flagDelete, $firstRow, $control); $htmlHead = $this->subrecordHead($linkNew, $flagDelete, $formElement[SUBRECORD_COLUMN_TITLE_DELETE], $firstRow, $control);
$htmlBody = ''; $htmlBody = '';
foreach ($formElement[FE_SQL1] as $row) { foreach ($formElement[FE_SQL1] as $row) {
$rowHtml = ''; $rowHtml = '';
...@@ -2456,12 +2483,37 @@ abstract class AbstractBuildForm { ...@@ -2456,12 +2483,37 @@ abstract class AbstractBuildForm {
} }
$rowAttribute = Support::doAttribute('class', $rowClass); $rowAttribute = Support::doAttribute('class', $rowClass);
$rowAttribute .= Support::doAttribute('title', $rowTooltip); $rowAttribute .= Support::doAttribute('title', $rowTooltip);
if ($hasDragAndDrop) {
$rowAttribute .= Support::doAttribute('id', $formElement[FE_HTML_ID] . '-' . $row[$nameColumnId]);
$rowAttribute .= Support::doAttribute('data-dnd-id', $row[$nameColumnId]);
}
$htmlBody .= Support::wrapTag("<tr $rowAttribute>", $rowHtml, true); $htmlBody .= Support::wrapTag("<tr $rowAttribute>", $rowHtml, true);
} }
// Handle DragAndDrop
$dndAttributes = '';
if ($hasDragAndDrop) {
$orderInterval = 10;
$numColumns = 0;
if (count($formElement[FE_SQL1]) > 0) {
$numColumns = count($formElement[FE_SQL1][0]) + (int)$flagDelete + (int)($flagNew || $flagEdit);
}
$dataDndApi = DND_SUBRECORD_ID . '=' . $formElement[FE_ID];
$dataDndApi .= '&' . DND_SUBRECORD_FORM_ID . '=' . $this->store->getVar('id', STORE_RECORD);
$dataDndApi .= '&' . FE_ORDER_INTERVAL . '=' . $orderInterval;
$dataDndApi .= '&' . FE_ORDER_COLUMN . '=' . $orderColumn;
$dataDndApi .= '&' . FE_DND_TABLE . '=' . $dndTable;
$dndAttributes = Support::doAttribute('class', 'qfq-dnd-sort');
$dndAttributes .= $this->evaluate->parse( "{{ '$dataDndApi' AS _data-dnd-api }}").' ';
$dndAttributes .= Support::doAttribute('data-columns', $numColumns);
}
$attribute = Support::doAttribute('class', $formElement[FE_SUBRECORD_TABLE_CLASS]); $attribute = Support::doAttribute('class', $formElement[FE_SUBRECORD_TABLE_CLASS]);
return Support::wrapTag("<table $attribute>", $htmlHead . Support::wrapTag('<tbody>', $htmlBody), true); return Support::wrapTag("<table $attribute>",
$htmlHead . Support::wrapTag("<tbody $dndAttributes>", $htmlBody), true);
} }
/** /**
......
...@@ -126,7 +126,7 @@ class BuildFormBootstrap extends AbstractBuildForm { ...@@ -126,7 +126,7 @@ class BuildFormBootstrap extends AbstractBuildForm {
$button = Support::wrapTag('<div class="row"><div class="col-md-12">', $this->buildButtons()); $button = Support::wrapTag('<div class="row"><div class="col-md-12">', $this->buildButtons());
// Show title / frame only if there is a title given. // Show title / frame only if there is a title given.
if ($this->formSpec[F_TITLE] != '') { if (trim($this->formSpec[F_TITLE]) != '') {
$classTitle = isset($this->formSpec[F_CLASS_TITLE]) ? $this->formSpec[F_CLASS_TITLE] : "qfq-form-title"; $classTitle = isset($this->formSpec[F_CLASS_TITLE]) ? $this->formSpec[F_CLASS_TITLE] : "qfq-form-title";
$title = Support::wrapTag('<div class="row"><div class="col-md-12">', Support::wrapTag('<div class="' . $classTitle . '">', $this->formSpec[F_TITLE])); $title = Support::wrapTag('<div class="row"><div class="col-md-12">', Support::wrapTag('<div class="' . $classTitle . '">', $this->formSpec[F_TITLE]));
} }
...@@ -501,6 +501,7 @@ class BuildFormBootstrap extends AbstractBuildForm { ...@@ -501,6 +501,7 @@ class BuildFormBootstrap extends AbstractBuildForm {
} }
$attributeLi .= Support::doAttribute(HTML_ATTR_ID, $htmlIdLi); $attributeLi .= Support::doAttribute(HTML_ATTR_ID, $htmlIdLi);
$attributeLi .= Support::doAttribute( 'title', $formElement[FE_TOOLTIP]);
$attributeLiA .= Support::doAttribute(HTML_ATTR_ID, $htmlIdLiA); $attributeLiA .= Support::doAttribute(HTML_ATTR_ID, $htmlIdLiA);
$a = Support::wrapTag("<a $attributeLiA" . Support::doAttribute('href', $hrefTarget) . ">", $formElement[FE_LABEL]); $a = Support::wrapTag("<a $attributeLiA" . Support::doAttribute('href', $hrefTarget) . ">", $formElement[FE_LABEL]);
$json[$htmlFormElementName][API_ELEMENT_UPDATE][$htmlIdLiA][API_ELEMENT_CONTENT] = $formElement[FE_LABEL]; $json[$htmlFormElementName][API_ELEMENT_UPDATE][$htmlIdLiA][API_ELEMENT_CONTENT] = $formElement[FE_LABEL];
......
...@@ -45,6 +45,8 @@ const FORM_BUTTON_DELETE = 'delete'; ...@@ -45,6 +45,8 @@ const FORM_BUTTON_DELETE = 'delete';
const FORM_BUTTON_CLOSE = 'close'; const FORM_BUTTON_CLOSE = 'close';
const FORM_BUTTON_SAVE = 'save'; const FORM_BUTTON_SAVE = 'save';
const REPORT_SAVE = 'reportSave';
const F_BS_COLUMNS = 'bsColumns'; const F_BS_COLUMNS = 'bsColumns';
const F_BS_LABEL_COLUMNS = 'bsLabelColumns'; const F_BS_LABEL_COLUMNS = 'bsLabelColumns';
...@@ -55,6 +57,7 @@ const RETURN_URL = 'return_url'; ...@@ -55,6 +57,7 @@ const RETURN_URL = 'return_url';
const RETURN_SIP = 'return_sip'; const RETURN_SIP = 'return_sip';
const RETURN_ARRAY = 'return_array'; const RETURN_ARRAY = 'return_array';
const SQL_FORM_ELEMENT_BY_ID = "SELECT * FROM FormElement AS fe WHERE fe.id = ?";
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"; 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";
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_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"; 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";
...@@ -233,6 +236,7 @@ const ERROR_MULTIPLE_URL_PAGE_MAILTO_DEFINITION = 1406; ...@@ -233,6 +236,7 @@ const ERROR_MULTIPLE_URL_PAGE_MAILTO_DEFINITION = 1406;
const ERROR_UNKNOWN_TOKEN = 1407; const ERROR_UNKNOWN_TOKEN = 1407;
const ERROR_TOO_FEW_PARAMETER_FOR_SENDMAIL = 1408; const ERROR_TOO_FEW_PARAMETER_FOR_SENDMAIL = 1408;
const ERROR_TOO_MANY_PARAMETER = 1409; const ERROR_TOO_MANY_PARAMETER = 1409;
const ERROR_INVALID_SAVE_PDF_FILENAME = 1410;
// Upload // Upload
const ERROR_UPLOAD = 1500; const ERROR_UPLOAD = 1500;
...@@ -257,6 +261,7 @@ const ERROR_DOWNLOAD_NOTHING_TO_DO = 1702; ...@@ -257,6 +261,7 @@ const ERROR_DOWNLOAD_NOTHING_TO_DO = 1702;
const ERROR_DOWNLOAD_UNEXPECTED_MIME_TYPE = 1703; const ERROR_DOWNLOAD_UNEXPECTED_MIME_TYPE = 1703;
const ERROR_DOWNLOAD_UNEXPECTED_NUMBER_OF_SOURCES = 1704; const ERROR_DOWNLOAD_UNEXPECTED_NUMBER_OF_SOURCES = 1704;
const ERROR_DOWNLOAD_FILE_NOT_READABLE = 1705; const ERROR_DOWNLOAD_FILE_NOT_READABLE = 1705;
const ERROR_DOWNLOAD_FOPEN_BLOCKED = 1706;
// Excel // Excel
const ERROR_EXCEL_POSITION_ARGUMENT_EMPTY = 1800; const ERROR_EXCEL_POSITION_ARGUMENT_EMPTY = 1800;
...@@ -302,12 +307,17 @@ const ERROR_LANGUAGE_NOT_CONFIGURED_IN_QFQ = 2300; ...@@ -302,12 +307,17 @@ const ERROR_LANGUAGE_NOT_CONFIGURED_IN_QFQ = 2300;
const ERROR_MISSING_SESSIONNAME = 2400; const ERROR_MISSING_SESSIONNAME = 2400;
const ERROR_QFQ_SESSION_MISSING = 2401; const ERROR_QFQ_SESSION_MISSING = 2401;
const ERROR_SESSION_BROKEN_SCRIPT_PATH = 2402; const ERROR_SESSION_BROKEN_SCRIPT_PATH = 2402;
const ERROR_MISSING_COOKIE = 2403;
const ERROR_HTML2PDF_MISSING_CONFIG = 2500; const ERROR_HTML2PDF_MISSING_CONFIG = 2500;
const ERROR_HTML2PDF_WKHTML_NOT_EXECUTABLE = 2501; const ERROR_HTML2PDF_WKHTML_NOT_EXECUTABLE = 2501;
const ERROR_HTML2PDF_WKHTML_FAILED = 2502; const ERROR_HTML2PDF_WKHTML_FAILED = 2502;
// Thumbnail
const ERROR_THUMBNAIL_RENDER = 2600; const ERROR_THUMBNAIL_RENDER = 2600;
// Drag and Drop
const ERROR_DND_EMPTY_REORDER_SQL = 2700;
// //
// Store Names: Identifier // Store Names: Identifier
// //
...@@ -353,6 +363,7 @@ const CLIENT_TYPO3VARS = '_sipForTypo3Vars'; ...@@ -353,6 +363,7 @@ const CLIENT_TYPO3VARS = '_sipForTypo3Vars';
// The following exist and might be the most used ones. // The following exist and might be the most used ones.
const CLIENT_SCRIPT_URL = 'SCRIPT_URL'; const CLIENT_SCRIPT_URL = 'SCRIPT_URL';
const CLIENT_SCRIPT_URI = 'SCRIPT_URI'; const CLIENT_SCRIPT_URI = 'SCRIPT_URI';
const CLIENT_HTTP_COOKIE = 'HTTP_COOKIE';
const CLIENT_HTTP_HOST = 'HTTP_HOST'; const CLIENT_HTTP_HOST = 'HTTP_HOST';
const CLIENT_HTTP_USER_AGENT = 'HTTP_USER_AGENT'; const CLIENT_HTTP_USER_AGENT = 'HTTP_USER_AGENT';
const CLIENT_SERVER_NAME = 'SERVER_NAME'; const CLIENT_SERVER_NAME = 'SERVER_NAME';
...@@ -400,6 +411,8 @@ const SYSTEM_DB_1_SERVER = 'DB_1_SERVER'; ...@@ -400,6 +411,8 @@ const SYSTEM_DB_1_SERVER = 'DB_1_SERVER';
const SYSTEM_DB_1_PASSWORD = 'DB_1_PASSWORD'; const SYSTEM_DB_1_PASSWORD = 'DB_1_PASSWORD';
const SYSTEM_DB_1_NAME = 'DB_1_NAME'; const SYSTEM_DB_1_NAME = 'DB_1_NAME';
const SYSTEM_T3_DB_NAME = 'T3_DB_NAME';
const SYSTEM_DB_INIT = 'init'; const SYSTEM_DB_INIT = 'init';
const SYSTEM_DB_INDEX_DATA = "indexData"; const SYSTEM_DB_INDEX_DATA = "indexData";
...@@ -422,6 +435,10 @@ const SYSTEM_SQL_LOG = 'sqlLog'; // Logging to file ...@@ -422,6 +435,10 @@ const SYSTEM_SQL_LOG = 'sqlLog'; // Logging to file
const SYSTEM_SQL_LOG_FILE = 'fileadmin/protected/log/sql.log'; const SYSTEM_SQL_LOG_FILE = 'fileadmin/protected/log/sql.log';
const SYSTEM_SQL_LOG_MODE = 'sqlLogMode'; // Mode, which statements to log. const SYSTEM_SQL_LOG_MODE = 'sqlLogMode'; // Mode, which statements to log.
const SYSTEM_FORM_SUBMIT_LOG_MODE = 'formSubmitLogMode';
const FORM_SUBMIT_LOG_MODE_ALL = 'all';
const FORM_SUBMIT_LOG_MODE_NONE = 'none';
const SYSTEM_DATE_FORMAT = 'dateFormat'; const SYSTEM_DATE_FORMAT = 'dateFormat';
const SYSTEM_REDIRECT_ALL_MAIL_TO = 'redirectAllMailTo'; const SYSTEM_REDIRECT_ALL_MAIL_TO = 'redirectAllMailTo';
const SYSTEM_MAIL_LOG = 'mailLog'; const SYSTEM_MAIL_LOG = 'mailLog';
...@@ -751,6 +768,8 @@ const ALIGN_VERTICAL = 'vertical'; ...@@ -751,6 +768,8 @@ const ALIGN_VERTICAL = 'vertical';
// Subrecord // Subrecord
const SUBRECORD_COLUMN_DEFAULT_MAX_LENGTH = 20; const SUBRECORD_COLUMN_DEFAULT_MAX_LENGTH = 20;
const SUBRECORD_COLUMN_TITLE_EDIT = 'subrecordColumnTitleEdit';
const SUBRECORD_COLUMN_TITLE_DELETE = 'subrecordColumnTitleDelete';
const FORM_ELEMENTS_NATIVE = 'native'; const FORM_ELEMENTS_NATIVE = 'native';
const FORM_ELEMENTS_SUBRECORD = 'subrecord'; const FORM_ELEMENTS_SUBRECORD = 'subrecord';
const FORM_ELEMENTS_NATIVE_SUBRECORD = 'native_subrecord'; const FORM_ELEMENTS_NATIVE_SUBRECORD = 'native_subrecord';
...@@ -842,6 +861,7 @@ const F_PARAMETER = 'parameter'; // valid for F_ and FE_ ...@@ -842,6 +861,7 @@ const F_PARAMETER = 'parameter'; // valid for F_ and FE_
const F_DB_INDEX = 'dbIndex'; const F_DB_INDEX = 'dbIndex';
const DB_INDEX_DEFAULT = "1"; const DB_INDEX_DEFAULT = "1";
const PARAM_DB_INDEX_DATA = '__dbIndexData'; // Submitted via SIP to make record locking DB aware. const PARAM_DB_INDEX_DATA = '__dbIndexData'; // Submitted via SIP to make record locking DB aware.
const F_FORM_SUBMIT_LOG_MODE = 'formSubmitLogMode';
const F_LDAP_SERVER = 'ldapServer'; const F_LDAP_SERVER = 'ldapServer';
const F_LDAP_BASE_DN = 'ldapBaseDn'; const F_LDAP_BASE_DN = 'ldapBaseDn';
...@@ -1038,6 +1058,7 @@ const FE_FILE_BUTTON_TEXT = 'fileButtonText'; ...@@ -1038,6 +1058,7 @@ const FE_FILE_BUTTON_TEXT = 'fileButtonText';
const FE_FILE_BUTTON_TEXT_DEFAULT = 'Choose File'; const FE_FILE_BUTTON_TEXT_DEFAULT = 'Choose File';
const FE_INPUT_TYPE = 'inputType'; const FE_INPUT_TYPE = 'inputType';
const FE_STEP = 'step'; const FE_STEP = 'step';
const FE_ACCEPT_ZERO_AS_REQUIRED = 'acceptZeroAsRequired';
const FE_IMAGE_CUT_RESIZE_WIDTH = 'resizeWidth'; const FE_IMAGE_CUT_RESIZE_WIDTH = 'resizeWidth';
const FE_IMAGE_CUT_KEEP_ORIGINAL