Commit 2abc7cd9 authored by Carsten  Rose's avatar Carsten Rose
Browse files

Refactor: Manual.rst update config variables (reorder), add 'qfqLog'....

Refactor: Manual.rst update config variables (reorder), add 'qfqLog'. Support.php: formSubmitLog hardcoded to fileadmin/protected/log. DOCUMENTATION_QFQ > SYSTEM_DOCUMENTATION_QFQ. Remove config var 'logDir'.
parent d84b8fec
Pipeline #1224 passed with stage
in 1 minute and 41 seconds
......@@ -382,6 +382,12 @@ Extension Manager: QFQ Configuration
| | | | *auto*: becomes 'yes', if 'flagProduction'!='yes', else 'no'. |
| | | | *no*: 'general errors' in QFQ (PHP) will be silently ignored. |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| formSubmitLogMode | all | | *all*: every form submission will be logged. |
| | | | *none*: no logging. |
| | | | See `Form Submit Log page`_ for example qfq code to display the log. |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| redirectAllMailTo | john@doe.com | If set, redirect all QFQ generated mails (Form, Report) to the specified. |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| sqlLogMode | modify | | *all*: every statement will be logged - this might a lot. |
| | | | *modify*: log only statements who change data. *error*: log only |
| | | DB errors. |
......@@ -390,9 +396,8 @@ Extension Manager: QFQ Configuration
| sqlLog | fileadmin/protected/log/sql.log | Filename to log SQL commands: relative to <site path> or absolute. If the |
| | | directory does not exist, create it. |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| formSubmitLogMode | all | | *all*: every form submission will be logged. |
| | | | *none*: no logging. |
| | | | See `Form Submit Log page`_ for example qfq code to display the log. |
| qfqLog | fileadmin/protected/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. |
| | | If the directory does not exist, create it. |
......@@ -400,8 +405,6 @@ Extension Manager: QFQ Configuration
| showDebugInfo | auto | FE - Possible values: yes|no|auto|download. For 'auto': If a BE User is |
| | | logged in, a debug information will be shown on the FE. |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| redirectAllMailTo | john@doe.com | If set, redirect all QFQ generated mails (Form, Report) to the specified. |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| Database |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| init | init=SET names utf8; SET sql_mode = | Global init for using the database. For 'sql_mode="NO_ENGINE_SUBSTITUTION"'|
......
......@@ -432,18 +432,19 @@ const SYSTEM_DB_INDEX_QFQ = "indexQfq";
//const SYSTEM_DB_INDEX_DATA_DEPRECATED = "DB_INDEX_DATA";
//const SYSTEM_DB_INDEX_QFQ_DEPRECATED = "DB_INDEX_QFQ";
const SYSTEM_FILEADMIN_PROTECTED_LOG = 'fileadmin/protected/log';
// Automatically filled by QFQ
const SYSTEM_DB_NAME_DATA = 'dbNameData';
const SYSTEM_DB_NAME_QFQ = 'dbNameQfq';
const SYSTEM_DB_NAME_T3 = 'dbNameT3';
const SYSTEM_LOG_DIR = 'logDir'; // Logging to file
const SYSTEM_LOG_DIR_DEFAULT = 'fileadmin/protected/log'; // Logging to file
const SYSTEM_QFQ_LOG = 'qfqLog'; // Logging to file
const SYSTEM_QFQ_LOG_FILE = 'fileadmin/protected/log/qfq.log';
const SYSTEM_MAIL_LOG = 'mailLog';
const SYSTEM_MAIL_LOG_FILE = 'fileadmin/protected/log/mail.log';
const SYSTEM_SQL_LOG = 'sqlLog'; // Logging to file
const SYSTEM_SQL_LOG_FILE = 'fileadmin/protected/log/sql.log';
const SYSTEM_SQL_LOG_MODE = 'sqlLogMode'; // Mode, which statements to log.
......@@ -454,8 +455,6 @@ const FORM_SUBMIT_LOG_MODE_NONE = 'none';
const SYSTEM_DATE_FORMAT = 'dateFormat';
const SYSTEM_REDIRECT_ALL_MAIL_TO = 'redirectAllMailTo';
const SYSTEM_MAIL_LOG = 'mailLog';
const SYSTEM_MAIL_LOG_FILE = 'fileadmin/protected/log/mail.log';
const SYSTEM_THROW_GENERAL_ERROR = 'throwExceptionGeneralError';
const SYSTEM_FLAG_PRODUCTION = 'flagProduction';
......@@ -585,8 +584,8 @@ const SYSTEM_THUMBNAIL_DIR_SECURE_DEFAULT = 'fileadmin/protected/qfqThumbnail';
const SYSTEM_THUMBNAIL_DIR_PUBLIC = 'thumbnailDirPublic';
const SYSTEM_THUMBNAIL_DIR_PUBLIC_DEFAULT = 'typo3temp/qfqThumbnail';
const DOCUMENTATION_QFQ = 'documentation';
const DOCUMENTATION_QFQ_URL = 'https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-053/Manual.html';
const SYSTEM_DOCUMENTATION_QFQ = 'documentation';
const SYSTEM_DOCUMENTATION_QFQ_URL = 'https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-053/Manual.html';
// Not stored in config.qfq.ini, but used in STORE_SYSTEM
......
......@@ -86,7 +86,7 @@ class Support {
throw new CodeException('Unknown mode: ' . $formLogMode, ERROR_UNKNOWN_TOKEN);
}
$filename = self::$store->getVar(SYSTEM_LOG_DIR, STORE_SYSTEM) . '/' . $formName . "." . $perBeSession . "log";
$filename = SYSTEM_FILEADMIN_PROTECTED_LOG . '/' . $formName . "." . $perBeSession . "log";
return sanitize::safeFilename($filename, false, true);
}
......
......@@ -82,7 +82,7 @@ class Config {
* @throws UserFormException
* @throws UserReportException
*/
public static function readConfig($configPhp = '') {
public static function readConfig($fileConfigPhp = '') {
$configT3qfq = array();
$configIni = ''; // outdated config file format
......@@ -95,7 +95,7 @@ class Config {
}
// In case of missing $configPhp
if (empty($configPhp) ) {
if (empty($fileConfigPhp) ) {
# Read 'LocalConfiguration.php'
if (isset($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf'][EXT_KEY])) {
......@@ -118,19 +118,19 @@ class Config {
}
$configIni = $pathTypo3Conf . '/' . CONFIG_QFQ_INI;
$configPhp = $pathTypo3Conf . '/' . CONFIG_QFQ_PHP;
$fileConfigPhp = $pathTypo3Conf . '/' . CONFIG_QFQ_PHP;
}
// Migrate legacy config file.
if (is_readable($configIni) && !is_readable($configPhp)) {
self::migrateConfigIniToPhp($configIni, $configPhp);
if (is_readable($configIni) && !is_readable($fileConfigPhp)) {
self::migrateConfigIniToPhp($configIni, $fileConfigPhp);
}
$config = include($configPhp);
$config = include($fileConfigPhp);
if ($config === false) {
throw new qfq\UserFormException ("Error read file: " . $configPhp, ERROR_IO_READ_FILE);
throw new qfq\UserFormException ("Error read file: " . $fileConfigPhp, ERROR_IO_READ_FILE);
}
// in case $configIni doesn't exist: just skip
......@@ -139,7 +139,7 @@ class Config {
}
$configT3qfq = self::getCustomVariable($configT3qfq);
// Settings in config.qfq.ini overwrite T3 settings
// Settings in config.qfq.php overwrite T3 settings
$config = array_merge($configT3qfq, $config);
$config = self::renameConfigElements($config);
......@@ -292,10 +292,10 @@ class Config {
SYSTEM_DATE_FORMAT => 'yyyy-mm-dd',
SYSTEM_SHOW_DEBUG_INFO => SYSTEM_SHOW_DEBUG_INFO_AUTO,
SYSTEM_MAIL_LOG => SYSTEM_MAIL_LOG_FILE,
SYSTEM_QFQ_LOG => SYSTEM_QFQ_LOG_FILE,
SYSTEM_SQL_LOG => SYSTEM_SQL_LOG_FILE,
SYSTEM_SQL_LOG_MODE => 'modify',
SYSTEM_MAIL_LOG => SYSTEM_MAIL_LOG_FILE,
F_BS_COLUMNS => 'col-md-12 col-lg-10',
F_BS_LABEL_COLUMNS => 'col-md-3 col-lg-3',
F_BS_INPUT_COLUMNS => 'col-md-6 col-lg-6',
......@@ -342,7 +342,7 @@ class Config {
SYSTEM_SESSION_TIMEOUT_SECONDS => SYSTEM_SESSION_TIMEOUT_SECONDS_DEFAULT,
DOCUMENTATION_QFQ => DOCUMENTATION_QFQ_URL,
SYSTEM_DOCUMENTATION_QFQ => SYSTEM_DOCUMENTATION_QFQ_URL,
SYSTEM_ENTER_AS_SUBMIT => 1,
SYSTEM_CMD_INKSCAPE => 'inkscape',
......
......@@ -81,13 +81,13 @@ class Store {
/**
* @param string $bodytext
* @param string $fileConfigIni
* @param string $fileConfigPhp
*
* @throws CodeException
* @throws UserFormException
* @throws UserReportException
*/
private function __construct($bodytext = '', $fileConfigIni = '') {
private function __construct($bodytext = '', $fileConfigPhp = '') {
// self::$session = Session::getInstance(self::$phpUnit);
......@@ -175,7 +175,7 @@ class Store {
self::fillStoreClient(); // should be filled before fillStoreSystem() to offer Client variables
self::fillStorePhpSession(STORE_EXTRA); // should be filled before fillStoreSystem() to restore variables like SYSTEM_SHOW_DEBUG_INFO
self::fillStorePhpSession(STORE_USER); // should be filled before fillStoreSystem() to restore variables like SYSTEM_SHOW_DEBUG_INFO
self::fillStoreSystem($fileConfigIni);
self::fillStoreSystem($fileConfigPhp);
self::fillStoreSip();
}
......@@ -297,16 +297,6 @@ class Store {
$config[SYSTEM_SHOW_DEBUG_INFO] = self::adjustConfigShowDebugInfo($config[SYSTEM_SHOW_DEBUG_INFO], self::beUserLoggdIn());
// make SQL PATH absolute. This is necessary to work in different directories correctly.
if (!empty($config[SYSTEM_SQL_LOG]) && $config[SYSTEM_SQL_LOG][0] !== '/') {
$config[SYSTEM_SQL_LOG] = $config[SYSTEM_SITE_PATH] . '/' . $config[SYSTEM_SQL_LOG];
}
// make SQL PATH absolute. This is necessary to work in different directories correctly.
if (!empty($config[SYSTEM_MAIL_LOG]) && $config[SYSTEM_MAIL_LOG][0] !== '/') {
$config[SYSTEM_MAIL_LOG] = $config[SYSTEM_SITE_PATH] . '/' . $config[SYSTEM_MAIL_LOG];
}
$config[SYSTEM_SEND_E_MAIL] = $config[SYSTEM_EXT_PATH] . '/qfq/external/sendEmail';
// In case the database credentials are given in the old style: copy them to the new style
......@@ -465,14 +455,14 @@ class Store {
/**
* Fill the system store by reading config.qfq.ini. Also setup config defaults.
*
* @param string $fileConfigIni
* @param string $fileConfigPhp
* @throws CodeException
* @throws UserFormException
* @throws UserReportException
*/
private static function fillStoreSystem($fileConfigIni = '') {
private static function fillStoreSystem($fileConfigPhp = '') {
$config = Config::readConfig($fileConfigIni);
$config = Config::readConfig($fileConfigPhp);
$config = self::doSystemPath($config);
$config = self::adjustConfig($config);
......
......@@ -328,71 +328,68 @@ class StoreTest extends TestCase {
$expect = [
'DB_1_USER' => '<DBUSER>',
'DB_1_SERVER' => '<DBSERVER>',
'DB_1_PASSWORD' => '<DBPW>',
'DB_1_NAME' => '<DB>',
'documentation' => 'https://docs.typo3.org/typo3cms/drafts/github/T3DocumentationStarter/Public-Info-053/Manual.html',
'flagProduction' => 'yes',
'thumbnailDirSecure' => 'fileadmin/protected/qfqThumbnail',
'thumbnailDirPublic' => 'typo3temp/qfqThumbnail',
'cmdInkscape' => 'inkscape',
'cmdConvert' => 'convert',
'cmdWkhtmltopdf' => '/opt/wkhtmltox/bin/wkhtmltopdf',
'dateFormat' => 'yyyy-mm-dd',
'throwExceptionGeneralError' => 'no',
'qfqLog' => 'fileadmin/protected/log/qfq.log',
'sqlLogMode' => 'modify',
'showDebugInfo' => 'auto',
'init' => 'set names utf8',
'update' => 'auto',
'indexData' => '1',
'indexQfq' => '1',
'escapeTypeDefault' => 'm',
'securityVarsHoneypot' => 'email,username,password',
'securityAttackDelay' => 5,
'securityShowMessage' => '0',
'securityGetMaxLength' => 50,
'sessionTimeoutSeconds' => 1800,
'recordLockTimeoutSeconds' => 900,
'enterAsSubmit' => 1,
'editFormPage' => 'form',
'extraButtonInfoInline' => '<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>',
'extraButtonInfoBelow' => '<span class="glyphicon glyphicon-info-sign text-info" aria-hidden="true"></span>',
'extraButtonInfoClass' => '',
'saveButtonText' => '',
'saveButtonTooltip' => 'Save',
'saveButtonClass' => 'btn btn-default navbar-btn',
'saveButtonGlyphIcon' => 'glyphicon-ok',
'closeButtonText' => '',
'closeButtonTooltip' => 'Close',
'closeButtonClass' => 'btn btn-default navbar-btn',
'closeButtonGlyphIcon' => 'glyphicon-remove',
'deleteButtonText' => '',
'deleteButtonTooltip' => 'Delete',
'deleteButtonClass' => 'btn btn-default navbar-btn',
'deleteButtonGlyphIcon' => 'glyphicon-trash',
'newButtonText' => '',
'newButtonTooltip' => 'New',
'newButtonClass' => 'btn btn-default navbar-btn',
'newButtonGlyphIcon' => 'glyphicon-plus',
'bsColumns' => 'col-md-12 col-lg-10',
'bsLabelColumns' => 'col-md-3 col-lg-3',
'bsInputColumns' => 'col-md-6 col-lg-6',
'bsNoteColumns' => 'col-md-3 col-lg-3',
'data-required-error' => 'data required',
'data-match-error' => 'fields do not match',
'data-error' => 'error',
'classPill' => 'qfq-color-grey-1',
'classBody' => 'qfq-color-grey-2',
'buttonOnChangeClass' => 'btn-info alert-info',
'dbNameData' => '<DB>',
'dbNameQfq' => '<DB>',
// 'sqlLog' => '/var/www/html/crose/qfq/filea...ql.log',
// 'mailLog' => '/var/www/html/crose/qfq/filea...il.log',
// 'SITE_PATH' => '/var/www/html/crose/qfq',
// 'EXT_PATH' => '/var/www/html/crose/qfq/typo3...xt/qfq',
// 'sendEmail' => '/var/www/html/crose/qfq/typo3...dEmail',
SYSTEM_DB_1_USER => '<DBUSER>',
SYSTEM_DB_1_SERVER => '<DBSERVER>',
SYSTEM_DB_1_PASSWORD => '<DBPW>',
SYSTEM_DB_1_NAME => '<DB>',
SYSTEM_DOCUMENTATION_QFQ => SYSTEM_DOCUMENTATION_QFQ_URL,
SYSTEM_FLAG_PRODUCTION => 'yes',
SYSTEM_THUMBNAIL_DIR_SECURE => SYSTEM_THUMBNAIL_DIR_SECURE_DEFAULT,
SYSTEM_THUMBNAIL_DIR_PUBLIC => SYSTEM_THUMBNAIL_DIR_PUBLIC_DEFAULT,
SYSTEM_CMD_INKSCAPE => 'inkscape',
SYSTEM_CMD_CONVERT => 'convert',
SYSTEM_CMD_WKHTMLTOPDF => '/opt/wkhtmltox/bin/wkhtmltopdf',
SYSTEM_DATE_FORMAT => 'yyyy-mm-dd',
SYSTEM_THROW_GENERAL_ERROR => 'no',
SYSTEM_QFQ_LOG => SYSTEM_QFQ_LOG_FILE,
SYSTEM_SQL_LOG_MODE => SQL_LOG_MODE_MODIFY,
SYSTEM_SHOW_DEBUG_INFO => SYSTEM_SHOW_DEBUG_INFO_AUTO,
SYSTEM_DB_INIT => 'set names utf8',
SYSTEM_DB_UPDATE => SYSTEM_DB_UPDATE_AUTO,
SYSTEM_DB_INDEX_DATA => '1',
SYSTEM_DB_INDEX_QFQ => '1',
SYSTEM_ESCAPE_TYPE_DEFAULT => 'm',
SYSTEM_SECURITY_VARS_HONEYPOT => 'email,username,password',
SYSTEM_SECURITY_ATTACK_DELAY => 5,
SYSTEM_SECURITY_SHOW_MESSAGE => '0',
SYSTEM_SECURITY_GET_MAX_LENGTH => 50,
SYSTEM_SESSION_TIMEOUT_SECONDS => SYSTEM_SESSION_TIMEOUT_SECONDS_DEFAULT,
SYSTEM_RECORD_LOCK_TIMEOUT_SECONDS => SYSTEM_RECORD_LOCK_TIMEOUT_SECONDS_DEFAULT,
SYSTEM_ENTER_AS_SUBMIT => 1,
SYSTEM_EDIT_FORM_PAGE => 'form',
SYSTEM_EXTRA_BUTTON_INFO_INLINE => '<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>',
SYSTEM_EXTRA_BUTTON_INFO_BELOW => '<span class="glyphicon glyphicon-info-sign text-info" aria-hidden="true"></span>',
SYSTEM_EXTRA_BUTTON_INFO_CLASS => '',
SYSTEM_SAVE_BUTTON_TEXT => '',
SYSTEM_SAVE_BUTTON_TOOLTIP => 'Save',
SYSTEM_SAVE_BUTTON_CLASS => 'btn btn-default navbar-btn',
SYSTEM_SAVE_BUTTON_GLYPH_ICON => 'glyphicon-ok',
SYSTEM_CLOSE_BUTTON_TEXT => '',
SYSTEM_CLOSE_BUTTON_TOOLTIP => 'Close',
SYSTEM_CLOSE_BUTTON_CLASS => 'btn btn-default navbar-btn',
SYSTEM_CLOSE_BUTTON_GLYPH_ICON => 'glyphicon-remove',
SYSTEM_DELETE_BUTTON_TEXT => '',
SYSTEM_DELETE_BUTTON_TOOLTIP => 'Delete',
SYSTEM_DELETE_BUTTON_CLASS => 'btn btn-default navbar-btn',
SYSTEM_DELETE_BUTTON_GLYPH_ICON => 'glyphicon-trash',
SYSTEM_NEW_BUTTON_TEXT => '',
SYSTEM_NEW_BUTTON_TOOLTIP => 'New',
SYSTEM_NEW_BUTTON_CLASS => 'btn btn-default navbar-btn',
SYSTEM_NEW_BUTTON_GLYPH_ICON => 'glyphicon-plus',
F_BS_COLUMNS => 'col-md-12 col-lg-10',
F_BS_LABEL_COLUMNS => 'col-md-3 col-lg-3',
F_BS_INPUT_COLUMNS => 'col-md-6 col-lg-6',
F_BS_NOTE_COLUMNS => 'col-md-3 col-lg-3',
F_FE_DATA_REQUIRED_ERROR => 'data required',
F_FE_DATA_MATCH_ERROR => 'fields do not match',
F_FE_DATA_ERROR => 'error',
F_CLASS_PILL => 'qfq-color-grey-1',
F_CLASS_BODY => 'qfq-color-grey-2',
F_BUTTON_ON_CHANGE_CLASS => 'btn-info alert-info',
SYSTEM_DB_NAME_DATA => '<DB>',
SYSTEM_DB_NAME_QFQ => '<DB>',
SYSTEM_SQL_LOG => SYSTEM_SQL_LOG_FILE,
SYSTEM_MAIL_LOG => SYSTEM_MAIL_LOG_FILE,
];
$body = <<< EOT
......@@ -413,7 +410,8 @@ EOT;
$config = $this->store->getStore(STORE_SYSTEM);
# The following won't be checked by content, cause they will change on different installations.
foreach ([ TYPO3_SQL_LOG, SYSTEM_MAIL_LOG, SYSTEM_SITE_PATH, SYSTEM_EXT_PATH, SYSTEM_SEND_E_MAIL] as $key) {
// foreach ([ SYSTEM_SQL_LOG, SYSTEM_MAIL_LOG, SYSTEM_SITE_PATH, SYSTEM_EXT_PATH, SYSTEM_SEND_E_MAIL] as $key) {
foreach ([ SYSTEM_SITE_PATH, SYSTEM_EXT_PATH, SYSTEM_SEND_E_MAIL] as $key) {
$this->assertTrue(isset($config[$key]), "Missing default value for '$key' " );
unset ($config[$key]);
}
......
......@@ -52,23 +52,20 @@ fillStoreSystemBySqlErrorMsg3 =
# cat=debug/debug; type=string; label=Throw exception General Error:Possible values: 'yes', 'no', 'auto'. Default is 'auto'. If a) 'yes' or b) 'auto' and 'flagProduction!=yes', throw an exception in case of a 'General Error'.
throwExceptionGeneralError = auto
# 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=Redirect all mail to ...:Default is empty. If set, redirect all QFQ generated mails (Form, Report) to the specified email address.
redirectAllMailTo =
# cat=debug/logDir; type=string; label=QFQ log directory:Default is '/var/www/protected/log'. PathFile is absolute or relative to '<site path>'.
logDir = fileadmin/protected/log/qfq.log
# cat=debug/qfq; type=string; label=QFQ log file:Default is 'fileadmin/protected/log/qfq.log'. A logfile of fired SQL statements. PathFile is absolute or relative to '<site path>'.
qfqLog = fileadmin/protected/log/qfq.log
# cat=debug/sql; type=string; label=SQL log mode:Default is 'modify'. A logfile of QFQ fired SQL statements will be written. Possible modes are 'all' - every statement will be logged (this might a lot). 'modify' - log only statements who change data. 'error' - log only DB errors. 'none' - log never.
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>'.
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/qfq; type=string; label=QFQ log file:Default is 'fileadmin/protected/log/qfq.log'. A logfile of fired SQL statements. PathFile is absolute or relative to '<site path>'.
qfqLog = fileadmin/protected/log/qfq.log
# 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
......
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