Commit cf275dd2 authored by Carsten  Rose's avatar Carsten Rose
Browse files

Merge branch 'develop' into 'master'

Develop

See merge request !349
parents 739a7f7d c2cc7ffe
Pipeline #5246 passed with stages
in 3 minutes and 25 seconds
......@@ -221,10 +221,11 @@ Display QFQ log files in realtime. Put the following code in a QFQ page content
# Show selected log file.
100 {
sql = SELECT 'file:fileadmin/protected/log/{{logfile:R}}' AS _monitor
sql = SELECT 'file:{{qfqProjectPath:Y}}/log/{{logfile:R}}' AS _monitor
head = <pre id="monitor-1">Please wait</pre>
}
**NOTE**: The `log` directory has been moved into `qfqProject` with a recent upgrade of QFQ. For backwards compatibility logs are still stored in `fileadmin/protected/log/` if that directory already exists.
.. _`form-submit-log-page`:
......
......@@ -67,7 +67,9 @@ Procedure to Find an Irreproducible Error
* qfq.log
* location: fileadmin/protected/log/qfq.log
* location: fileadmin/protected/qfqProject/log/qfq.log
* **NOTE**: The `log` directory has been moved into `qfqProject` with a recent upgrade of QFQ. For backwards compatibility logs are still stored in `fileadmin/protected/log/` if that directory already exists.
* Look for error messages which were sent to the user at that time. (search for user-name in file)
* Look at actions performed during the time of Error
......
......@@ -173,9 +173,11 @@ Send Email
QFQ sends mail via `sendEmail` http://caspian.dotconf.net/menu/Software/SendEmail/ - a small perl script without a central
configuration.
By default, `sendEmail` uses the local installed MTA, writes a logfile to `fileadmin/protected/log/mail.log` and handles attachments
By default, `sendEmail` uses the local installed MTA, writes a logfile to `fileadmin/protected/qfqProject/log/mail.log` and handles attachments
via commandline options. A basic HTML email support is implemented.
**NOTE**: The `log` directory has been moved into `qfqProject` with a recent upgrade of QFQ. For backwards compatibility logs are still stored in `fileadmin/protected/log/` if that directory already exists.
The latest version is v1.56, which has at least one bug. That one is patched in the QFQ internal version v1.56p1 (see
QFQ GIT sources in directory 'patches/sendEmail.patch').
......@@ -285,7 +287,7 @@ Installation: Check List
* Protect the directory `<T3 installation>/fileadmin/protected` in Apache against direct file access.
* `<T3 installation>/fileadmin/protected/` should be used for confidential (uploaded / generated) data.
* `<T3 installation>/fileadmin/protected/log/...` is the default place for QFQ log files.
* `<T3 installation>/fileadmin/protected/qfqProject/log/...` is the default place for QFQ log files.
* Protect the directory `<T3 installation>/fileadmin` in Apache to not execute PHP Scripts - malicious uploads won't be executed.
* Setup a log rotation rule for `sqlLog`.
......@@ -335,20 +337,23 @@ qfq.json
* Additionally to the keywords bellow one can also override the configuration values defined in the Typo3 extension manager: :ref:`extension-manager-qfq-configuration`
* e.g. if `qfq.json` contains `"flagProduction":"no"` then this value is taken instead of the one set in the extension manager.
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| Keyword | Example | Description |
+===============================+=======================================================+============================================================================+
| DB_<n>_USER | DB_1_USER=qfqUser | Credentials configured in MySQL |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| DB_<n>_PASSWORD | DB_1_PASSWORD=1234567890 | Credentials configured in MySQL |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| DB_<n>_SERVER | DB_1_SERVER=localhost | Hostname of MySQL Server |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| DB_<n>_NAME | DB_1_NAME=qfq_db | Database name |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| LDAP_1_RDN | LDAP_1_RDN='ou=Admin,ou=example,dc=com' | Credentials for non-anonymous LDAP access. Only one set supported. |
| LDAP_1_PASSWORD | LDAP_1_PASSWORD='mySecurePassword' | |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
+===============================+=======================================================+==========================================================================================================+
| DB_<n>_USER | "DB_1_USER"="qfqUser" | Credentials configured in MySQL |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| DB_<n>_PASSWORD | "DB_1_PASSWORD"="1234567890" | Credentials configured in MySQL |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| DB_<n>_SERVER | "DB_1_SERVER"="localhost" | Hostname of MySQL Server |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| DB_<n>_NAME | "DB_1_NAME"="qfq_db" | Database name |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| LDAP_1_RDN | "LDAP_1_RDN"="ou=Admin,ou=example,dc=com " | Credentials for non-anonymous LDAP access. Only one set supported. |
| LDAP_1_PASSWORD | "LDAP_1_PASSWORD"="mySecurePassword" | |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| PASSWORD_HASH_TYPE | "PASSWORD_HASH_TYPE"="PASSWORD_BCRYPT" | Password hashing algorithm used for "p" action class. See: :ref:`variable-escape` |
| | | Possible values: "PASSWORD_ARGON2I" (QFQ default), "PASSWORD_BCRYPT", "PASSWORD_DEFAULT" (PHP default) |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
Example: *fileadmin/protected/qfqProject/qfq.json*: ::
......@@ -453,13 +458,13 @@ Extension Manager: QFQ Configuration
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| sqlLogModeAutoCron | error | Applies only to AutoCron Jobs. For production 'error' should be fine. |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| sqlLog | fileadmin/protected/log/sql.log | Filename to log SQL commands: relative to <site path> or absolute. If the |
| sqlLog | fileadmin/protected/qfqProject/log/sql.log | Filename to log SQL commands: relative to <site path> or absolute. If the |
| | | directory does not exist, create it. |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| qfqLog | fileadmin/protected/log/qfq.log | Filename to log general QFQ events:relative to <site path> or absolute. |
| qfqLog | fileadmin/protected/qfqProject/log/qfq.log | Filename to log general QFQ events:relative to <site path> or absolute. |
| | | If the directory does not exist, create it. |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| mailLog | fileadmin/protected/log/mail.log | Filename to log `sendEmail` commands: relative to <site path> or absolute. |
| mailLog | fileadmin/protected/qfqProject/log/mail.log | Filename to log `sendEmail` commands: relative to <site path> or absolute. |
| | | If the directory does not exist, create it. |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| showDebugInfo | auto | FE - Possible values: yes|no|auto|download. For 'auto': If a BE User is |
......
......@@ -52,6 +52,24 @@ Features
Bug Fixes
^^^^^^^^^
Version 21.y.y
--------------
Date: <date>
Notes
^^^^^
* The `log` directory was moved into the `qfqProject` directory in version 21.2.0 for new installations. But if the
directory `fileadmin/protected/log` already exists then QFQ keeps storing logs there. This was added to release notes
of 21.2.0 in hindsight.
Features
^^^^^^^^
Bug Fixes
^^^^^^^^^
Version 21.5.0
--------------
......@@ -190,6 +208,9 @@ Date: 01.02.2021
Notes
^^^^^
* The `log` directory was moved into the `qfqProject` directory in version 21.2.0 for new installations. But if the
directory `fileadmin/protected/log` already exists then QFQ keeps storing logs there. This was added to release notes
of 21.2.0 in hindsight.
Features
^^^^^^^^
......@@ -197,6 +218,7 @@ Features
* #10286 / Download Links: Glyphicon selbst wählen/ausblenden
* #11878 / Purge extension option config.documentation
* #6793 / Source files for ZIP archives might now specified with a path/filename how they are called inside the ZIP.
* log directory was moved into qfqProject directory
Bug Fixes
^^^^^^^^^
......
......@@ -221,7 +221,7 @@ The following `escape` & `action` types are available:
+-------+----------------------------------------------------------------------------------------------------------------------------------+
| m | `real_escape_string() <http://php.net/manual/en/mysqli.real-escape-string.php>`_ (m = mysql) |
+-------+----------------------------------------------------------------------------------------------------------------------------------+
| p | Password hashing: depends on the hashing type in the Typo3 installation, includes salting if configured. |
| p | Password hashing with salting. Password hashing algorithm may be configured in: :ref:`qfq.json` (default is Argon2i) |
+-------+----------------------------------------------------------------------------------------------------------------------------------+
| s | Single ticks ``'`` will be escaped by ``\'``. |
+-------+----------------------------------------------------------------------------------------------------------------------------------+
......
......@@ -107,17 +107,20 @@ fi
### Write config files ###
# QFQ config
echo "
<?php
return [
'DB_1_USER' => '${MYSQL_USER}',
'DB_1_SERVER' => 'db',
'DB_1_PASSWORD' => '${MYSQL_PASSWORD}',
'DB_1_NAME' => '${QFQ_DATABASE}',
];" > config.qfq.php
docker cp config.qfq.php ${T3_CONTAINER}:/var/www/html/typo3conf/config.qfq.php
rm config.qfq.php
docker exec ${T3_CONTAINER} chown www-data:www-data /var/www/html/typo3conf/config.qfq.php
# NOTE: If the baseUrl is empty QFQ throws an exception. (The space is a hack to circumvent that)
cat <<EOT >> qfq.json
{
"DB_1_USER": "${MYSQL_USER}",
"DB_1_SERVER": "db",
"DB_1_PASSWORD": "${MYSQL_PASSWORD}",
"DB_1_NAME": "${QFQ_DATABASE}",
"baseUrl": " "
}
EOT
docker exec ${T3_CONTAINER} mkdir -p "/var/www/html/fileadmin/protected/qfqProject/conf"
docker cp qfq.json ${T3_CONTAINER}:/var/www/html/fileadmin/protected/qfqProject/conf/qfq.json
rm qfq.json
docker exec ${T3_CONTAINER} chown -R www-data:www-data /var/www/html/fileadmin/protected
# Typo3 config
docker exec ${T3_CONTAINER} sed -i -e "s/<MYSQL_USER>/${MYSQL_USER}/g" /var/www/html/typo3conf/LocalConfiguration.php
......
......@@ -38,7 +38,6 @@ $status = HTTP_400_BAD_REQUEST;
try {
try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']);
$data = $qfq->dataReport();
......
......@@ -72,8 +72,6 @@ $flagSuccess = false;
try {
try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']);
$answer = $qfq->delete();
......
......@@ -18,7 +18,6 @@ use IMATHUZH\Qfq\Core\Helper\Path;
*
*/
try {
Path::setMainPaths();
$dirty = new Dirty();
$answer = $dirty->process();
......
......@@ -22,7 +22,6 @@ $output = '';
try {
try {
Path::setMainPaths();
$download = new Download();
// If all is fine: process() will output file via print() !!
......
......@@ -51,7 +51,6 @@ $answer[API_MESSAGE] = '';
try {
try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']);
$data = $qfq->dragAndDrop();
......
......@@ -38,7 +38,6 @@ $answer[API_MESSAGE] = '';
try {
try {
Path::setMainPaths();
$fileUpload = new File();
$fileUpload->process();
......
......@@ -52,7 +52,6 @@ $answer[API_MESSAGE] = '';
try {
try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']);
$data = $qfq->updateForm();
......
......@@ -20,7 +20,6 @@ use IMATHUZH\Qfq\Core\Store\Config;
* Main
*/
try {
Path::setMainPaths();
$html2pdf = new Html2Pdf(Config::getConfigArray());
$html2pdf->outputHtml2Pdf();
......
......@@ -22,7 +22,6 @@ $data = array();
try {
try {
Path::setMainPaths();
$form = OnString::splitPathInfoToIdForm($_SERVER['PATH_INFO'] ?? '', $restId, $restForm);
// get latest `ìd`
......
......@@ -52,7 +52,6 @@ $answer[API_MESSAGE] = '';
try {
try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => ""]);
$data = $qfq->saveForm();
......
......@@ -36,7 +36,6 @@ $status = HTTP_400_BAD_REQUEST;
try {
try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']);
$qfq->setting();
......
......@@ -19,7 +19,6 @@ use IMATHUZH\Qfq\Core\Helper\Path;
*
*/
try {
Path::setMainPaths();
$typeAhead = new TypeAhead();
$answer = $typeAhead->process();
......
......@@ -35,7 +35,6 @@ class QfqController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
$flagOk = false;
try {
Path::setMainPaths();
$contentObject = $this->configurationManager->getContentObject();
// By T3 default 'E_NOTICE' is unset. E.g. 'Undefined Index' will throw an exception.
......
......@@ -641,7 +641,7 @@ abstract class AbstractBuildForm {
*/
public function getActionUrl() {
return Path::appToApi(API_SAVE_PHP);
return Path::urlApi(API_SAVE_PHP);
}
/**
......@@ -2567,7 +2567,7 @@ abstract class AbstractBuildForm {
}
if (isset($control[SUBRECORD_COLUMN_ICON][$columnName])) {
$cell = ($cell === '') ? '' : "<image src='" . Path::appToExt(Path::EXT_TO_PATH_ICONS) . "/$cell'>";
$cell = ($cell === '') ? '' : "<image src='" . Path::urlExt(Path::EXT_TO_PATH_ICONS, $cell) . "'>";
}
if (isset($control[SUBRECORD_COLUMN_MAILTO][$columnName])) {
......@@ -2617,7 +2617,7 @@ abstract class AbstractBuildForm {
$sip = $this->store->getSipInstance();
return $sip->queryStringToSip($queryString, $mode, Path::appToApi(API_DELETE_PHP));
return $sip->queryStringToSip($queryString, $mode, Path::urlApi(API_DELETE_PHP));
}
/**
......@@ -2905,8 +2905,8 @@ abstract class AbstractBuildForm {
$attributeFabric = Support::doAttribute('class', ANNOTATE_GRAPHIC_CSS_CLASS);
$attributeFabric .= Support::doAttribute('data-background-image', $this->fileToSipUrl($formElement[FE_IMAGE_SOURCE]));
$attributeFabric .= Support::doAttribute('data-control-name', $formElement[FE_HTML_ID]);
$attributeFabric .= Support::doAttribute('data-buttons', Path::appToExt('Resources/Public/Json/fabric.buttons.json'));
$attributeFabric .= Support::doAttribute('data-emojis', Path::appToExt('Resources/Public/Json/qfq.emoji.json'));
$attributeFabric .= Support::doAttribute('data-buttons', Path::urlExt('Resources/Public/Json/fabric.buttons.json'));
$attributeFabric .= Support::doAttribute('data-emojis', Path::urlExt('Resources/Public/Json/qfq.emoji.json'));
$attributeFabric .= Support::doAttribute('data-fabric-color', HelperFormElement::penColorToHex($formElement));
$attributeFabric .= HelperFormElement::getAttributeFeMode($formElement[FE_MODE]);
if ($formElement[FE_MODE] == FE_MODE_READONLY) {
......@@ -2971,7 +2971,7 @@ abstract class AbstractBuildForm {
// data-image-output="target-png">
// </div>
$attributeFabric = Support::doAttribute('class', ANNOTATE_GRAPHIC_CSS_CLASS);
$attributeFabric .= Support::doAttribute('data-buttons', Path::appToExt('Resources/Public/Json/fabric.editor.buttons.json'));
$attributeFabric .= Support::doAttribute('data-buttons', Path::urlExt('Resources/Public/Json/fabric.editor.buttons.json'));
$attributeFabric .= Support::doAttribute('data-edit-image', 'true');
$attributeFabric .= Support::doAttribute('data-background-image', $imageFileName);
$attributeFabric .= Support::doAttribute('data-control-name', $htmlFabricId);
......@@ -3017,7 +3017,7 @@ abstract class AbstractBuildForm {
$param[DOWNLOAD_MODE] = DOWNLOAD_MODE_FILE;
$param[SIP_DOWNLOAD_PARAMETER] = base64_encode(TOKEN_FILE . PARAM_TOKEN_DELIMITER . $pathFileName);
$url = $this->sip->queryStringToSip(Path::appToApi(API_DOWNLOAD_PHP) . '?' . KeyValueStringParser::unparse($param, '=', '&'), RETURN_URL);
$url = $this->sip->queryStringToSip(Path::urlApi(API_DOWNLOAD_PHP) . '?' . KeyValueStringParser::unparse($param, '=', '&'), RETURN_URL);
return $url;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment