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 ...@@ -221,10 +221,11 @@ Display QFQ log files in realtime. Put the following code in a QFQ page content
# Show selected log file. # Show selected log file.
100 { 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> 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`: .. _`form-submit-log-page`:
......
...@@ -67,7 +67,9 @@ Procedure to Find an Irreproducible Error ...@@ -67,7 +67,9 @@ Procedure to Find an Irreproducible Error
* qfq.log * 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 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 * Look at actions performed during the time of Error
...@@ -267,4 +269,4 @@ The FE User record (table: fe_users) ...@@ -267,4 +269,4 @@ The FE User record (table: fe_users)
* Has to be assigned to at least one FE Group. Check ``fe_users.usergroup``. * Has to be assigned to at least one FE Group. Check ``fe_users.usergroup``.
* Has to be assigned to a T3 page ``fe_users.pid``. * Has to be assigned to a T3 page ``fe_users.pid``.
* The T3 page has to be configured as ``record store`` on the T3 Plugin login box. * The T3 page has to be configured as ``record store`` on the T3 Plugin login box.
* Access time has to be zero or a currently valid period. * Access time has to be zero or a currently valid period.
\ No newline at end of file
...@@ -173,9 +173,11 @@ Send Email ...@@ -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 QFQ sends mail via `sendEmail` http://caspian.dotconf.net/menu/Software/SendEmail/ - a small perl script without a central
configuration. 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. 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 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'). QFQ GIT sources in directory 'patches/sendEmail.patch').
...@@ -285,7 +287,7 @@ Installation: Check List ...@@ -285,7 +287,7 @@ Installation: Check List
* Protect the directory `<T3 installation>/fileadmin/protected` in Apache against direct file access. * 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/` 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. * 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`. * Setup a log rotation rule for `sqlLog`.
...@@ -335,20 +337,23 @@ qfq.json ...@@ -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` * 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. * 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 | | Keyword | Example | Description |
+===============================+=======================================================+============================================================================+ +===============================+=======================================================+==========================================================================================================+
| DB_<n>_USER | DB_1_USER=qfqUser | Credentials configured in MySQL | | DB_<n>_USER | "DB_1_USER"="qfqUser" | Credentials configured in MySQL |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+ +-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| DB_<n>_PASSWORD | DB_1_PASSWORD=1234567890 | 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>_SERVER | "DB_1_SERVER"="localhost" | Hostname of MySQL Server |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+ +-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------------------------------------+
| DB_<n>_NAME | DB_1_NAME=qfq_db | Database name | | 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_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' | | | 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*: :: Example: *fileadmin/protected/qfqProject/qfq.json*: ::
...@@ -453,13 +458,13 @@ Extension Manager: QFQ Configuration ...@@ -453,13 +458,13 @@ Extension Manager: QFQ Configuration
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+ +-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| sqlLogModeAutoCron | error | Applies only to AutoCron Jobs. For production 'error' should be fine. | | 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. | | | | 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. | | | | 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. | | | | If the directory does not exist, create it. |
+-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+ +-----------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
| showDebugInfo | auto | FE - Possible values: yes|no|auto|download. For 'auto': If a BE User is | | showDebugInfo | auto | FE - Possible values: yes|no|auto|download. For 'auto': If a BE User is |
......
...@@ -52,6 +52,24 @@ Features ...@@ -52,6 +52,24 @@ Features
Bug Fixes 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 Version 21.5.0
-------------- --------------
...@@ -190,6 +208,9 @@ Date: 01.02.2021 ...@@ -190,6 +208,9 @@ Date: 01.02.2021
Notes 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 Features
^^^^^^^^ ^^^^^^^^
...@@ -197,6 +218,7 @@ Features ...@@ -197,6 +218,7 @@ Features
* #10286 / Download Links: Glyphicon selbst wählen/ausblenden * #10286 / Download Links: Glyphicon selbst wählen/ausblenden
* #11878 / Purge extension option config.documentation * #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. * #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 Bug Fixes
^^^^^^^^^ ^^^^^^^^^
......
...@@ -221,7 +221,7 @@ The following `escape` & `action` types are available: ...@@ -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) | | 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 ``\'``. | | s | Single ticks ``'`` will be escaped by ``\'``. |
+-------+----------------------------------------------------------------------------------------------------------------------------------+ +-------+----------------------------------------------------------------------------------------------------------------------------------+
......
...@@ -107,17 +107,20 @@ fi ...@@ -107,17 +107,20 @@ fi
### Write config files ### ### Write config files ###
# QFQ config # QFQ config
echo " # NOTE: If the baseUrl is empty QFQ throws an exception. (The space is a hack to circumvent that)
<?php cat <<EOT >> qfq.json
return [ {
'DB_1_USER' => '${MYSQL_USER}', "DB_1_USER": "${MYSQL_USER}",
'DB_1_SERVER' => 'db', "DB_1_SERVER": "db",
'DB_1_PASSWORD' => '${MYSQL_PASSWORD}', "DB_1_PASSWORD": "${MYSQL_PASSWORD}",
'DB_1_NAME' => '${QFQ_DATABASE}', "DB_1_NAME": "${QFQ_DATABASE}",
];" > config.qfq.php "baseUrl": " "
docker cp config.qfq.php ${T3_CONTAINER}:/var/www/html/typo3conf/config.qfq.php }
rm config.qfq.php EOT
docker exec ${T3_CONTAINER} chown www-data:www-data /var/www/html/typo3conf/config.qfq.php 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 # Typo3 config
docker exec ${T3_CONTAINER} sed -i -e "s/<MYSQL_USER>/${MYSQL_USER}/g" /var/www/html/typo3conf/LocalConfiguration.php 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; ...@@ -38,7 +38,6 @@ $status = HTTP_400_BAD_REQUEST;
try { try {
try { try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']); $qfq = new QuickFormQuery(['bodytext' => '']);
$data = $qfq->dataReport(); $data = $qfq->dataReport();
......
...@@ -72,8 +72,6 @@ $flagSuccess = false; ...@@ -72,8 +72,6 @@ $flagSuccess = false;
try { try {
try { try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']); $qfq = new QuickFormQuery(['bodytext' => '']);
$answer = $qfq->delete(); $answer = $qfq->delete();
......
...@@ -18,7 +18,6 @@ use IMATHUZH\Qfq\Core\Helper\Path; ...@@ -18,7 +18,6 @@ use IMATHUZH\Qfq\Core\Helper\Path;
* *
*/ */
try { try {
Path::setMainPaths();
$dirty = new Dirty(); $dirty = new Dirty();
$answer = $dirty->process(); $answer = $dirty->process();
......
...@@ -22,7 +22,6 @@ $output = ''; ...@@ -22,7 +22,6 @@ $output = '';
try { try {
try { try {
Path::setMainPaths();
$download = new Download(); $download = new Download();
// If all is fine: process() will output file via print() !! // If all is fine: process() will output file via print() !!
......
...@@ -51,7 +51,6 @@ $answer[API_MESSAGE] = ''; ...@@ -51,7 +51,6 @@ $answer[API_MESSAGE] = '';
try { try {
try { try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']); $qfq = new QuickFormQuery(['bodytext' => '']);
$data = $qfq->dragAndDrop(); $data = $qfq->dragAndDrop();
......
...@@ -38,7 +38,6 @@ $answer[API_MESSAGE] = ''; ...@@ -38,7 +38,6 @@ $answer[API_MESSAGE] = '';
try { try {
try { try {
Path::setMainPaths();
$fileUpload = new File(); $fileUpload = new File();
$fileUpload->process(); $fileUpload->process();
......
...@@ -52,7 +52,6 @@ $answer[API_MESSAGE] = ''; ...@@ -52,7 +52,6 @@ $answer[API_MESSAGE] = '';
try { try {
try { try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']); $qfq = new QuickFormQuery(['bodytext' => '']);
$data = $qfq->updateForm(); $data = $qfq->updateForm();
......
...@@ -20,7 +20,6 @@ use IMATHUZH\Qfq\Core\Store\Config; ...@@ -20,7 +20,6 @@ use IMATHUZH\Qfq\Core\Store\Config;
* Main * Main
*/ */
try { try {
Path::setMainPaths();
$html2pdf = new Html2Pdf(Config::getConfigArray()); $html2pdf = new Html2Pdf(Config::getConfigArray());
$html2pdf->outputHtml2Pdf(); $html2pdf->outputHtml2Pdf();
......
...@@ -22,7 +22,6 @@ $data = array(); ...@@ -22,7 +22,6 @@ $data = array();
try { try {
try { try {
Path::setMainPaths();
$form = OnString::splitPathInfoToIdForm($_SERVER['PATH_INFO'] ?? '', $restId, $restForm); $form = OnString::splitPathInfoToIdForm($_SERVER['PATH_INFO'] ?? '', $restId, $restForm);
// get latest `ìd` // get latest `ìd`
......
...@@ -52,7 +52,6 @@ $answer[API_MESSAGE] = ''; ...@@ -52,7 +52,6 @@ $answer[API_MESSAGE] = '';
try { try {
try { try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => ""]); $qfq = new QuickFormQuery(['bodytext' => ""]);
$data = $qfq->saveForm(); $data = $qfq->saveForm();
......
...@@ -36,7 +36,6 @@ $status = HTTP_400_BAD_REQUEST; ...@@ -36,7 +36,6 @@ $status = HTTP_400_BAD_REQUEST;
try { try {
try { try {
Path::setMainPaths();
$qfq = new QuickFormQuery(['bodytext' => '']); $qfq = new QuickFormQuery(['bodytext' => '']);
$qfq->setting(); $qfq->setting();
......
...@@ -19,7 +19,6 @@ use IMATHUZH\Qfq\Core\Helper\Path; ...@@ -19,7 +19,6 @@ use IMATHUZH\Qfq\Core\Helper\Path;
* *
*/ */
try { try {
Path::setMainPaths();
$typeAhead = new TypeAhead(); $typeAhead = new TypeAhead();
$answer = $typeAhead->process(); $answer = $typeAhead->process();
......
...@@ -35,7 +35,6 @@ class QfqController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController { ...@@ -35,7 +35,6 @@ class QfqController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
$flagOk = false; $flagOk = false;
try { try {
Path::setMainPaths();
$contentObject = $this->configurationManager->getContentObject(); $contentObject = $this->configurationManager->getContentObject();
// By T3 default 'E_NOTICE' is unset. E.g. 'Undefined Index' will throw an exception. // By T3 default 'E_NOTICE' is unset. E.g. 'Undefined Index' will throw an exception.
......
...@@ -641,7 +641,7 @@ abstract class AbstractBuildForm { ...@@ -641,7 +641,7 @@ abstract class AbstractBuildForm {
*/ */
public function getActionUrl() { public function getActionUrl() {
return Path::appToApi(API_SAVE_PHP); return Path::urlApi(API_SAVE_PHP);
} }
/** /**
...@@ -2567,7 +2567,7 @@ abstract class AbstractBuildForm { ...@@ -2567,7 +2567,7 @@ abstract class AbstractBuildForm {
} }
if (isset($control[SUBRECORD_COLUMN_ICON][$columnName])) { 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])) { if (isset($control[SUBRECORD_COLUMN_MAILTO][$columnName])) {
...@@ -2617,7 +2617,7 @@ abstract class AbstractBuildForm { ...@@ -2617,7 +2617,7 @@ abstract class AbstractBuildForm {
$sip = $this->store->getSipInstance(); $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 { ...@@ -2905,8 +2905,8 @@ abstract class AbstractBuildForm {
$attributeFabric = Support::doAttribute('class', ANNOTATE_GRAPHIC_CSS_CLASS); $attributeFabric = Support::doAttribute('class', ANNOTATE_GRAPHIC_CSS_CLASS);
$attributeFabric .= Support::doAttribute('data-background-image', $this->fileToSipUrl($formElement[FE_IMAGE_SOURCE])); $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-control-name', $formElement[FE_HTML_ID]);
$attributeFabric .= Support::doAttribute('data-buttons', Path::appToExt('Resources/Public/Json/fabric.buttons.json')); $attributeFabric .= Support::doAttribute('data-buttons', Path::urlExt('Resources/Public/Json/fabric.buttons.json'));
$attributeFabric .= Support::doAttribute('data-emojis', Path::appToExt('Resources/Public/Json/qfq.emoji.json')); $attributeFabric .= Support::doAttribute('data-emojis', Path::urlExt('Resources/Public/Json/qfq.emoji.json'));
$attributeFabric .= Support::doAttribute('data-fabric-color', HelperFormElement::penColorToHex($formElement)); $attributeFabric .= Support::doAttribute('data-fabric-color', HelperFormElement::penColorToHex($formElement));
$attributeFabric .= HelperFormElement::getAttributeFeMode($formElement[FE_MODE]); $attributeFabric .= HelperFormElement::getAttributeFeMode($formElement[FE_MODE]);
if ($formElement[FE_MODE] == FE_MODE_READONLY) { if ($formElement[FE_MODE] == FE_MODE_READONLY) {
...@@ -2971,7 +2971,7 @@ abstract class AbstractBuildForm { ...@@ -2971,7 +2971,7 @@ abstract class AbstractBuildForm {
// data-image-output="target-png"> // data-image-output="target-png">
// </div> // </div>
$attributeFabric = Support::doAttribute('class', ANNOTATE_GRAPHIC_CSS_CLASS); $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-edit-image', 'true');
$attributeFabric .= Support::doAttribute('data-background-image', $imageFileName); $attributeFabric .= Support::doAttribute('data-background-image', $imageFileName);
$attributeFabric .= Support::doAttribute('data-control-name', $htmlFabricId); $attributeFabric .= Support::doAttribute('data-control-name', $htmlFabricId);
...@@ -3017,7 +3017,7 @@ abstract class AbstractBuildForm { ...@@ -3017,7 +3017,7 @@ abstract class AbstractBuildForm {
$param[DOWNLOAD_MODE] = DOWNLOAD_MODE_FILE; $param[DOWNLOAD_MODE] = DOWNLOAD_MODE_FILE;
$param[SIP_DOWNLOAD_PARAMETER] = base64_encode(TOKEN_FILE . PARAM_TOKEN_DELIMITER . $pathFileName); $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; 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