Commit b1371ce0 authored by Marc Egger's avatar Marc Egger
Browse files

Merge branch 'master' into B7455PHPUnitTestsFail

parents 27384059 8ba9ae8b
......@@ -6,7 +6,7 @@ RELEASE_DATE = $(shell date '+%Y%m%d%H%M')
GIT_REVISION_SHORT = $(shell git rev-parse --short HEAD || true)
GIT_REVISION_LONG = $(shell git rev-parse HEAD || true)
EXTENSION_CONTENT = Classes Configuration Documentation qfq Resources ext_emconf.php ext_localconf.php ext_tables.php ext_icon.png ext_conf_template.txt config.qfq.example.php RELEASE.txt
EXTENSION_CONTENT = Classes Configuration Documentation Source Resources ext_emconf.php ext_localconf.php ext_tables.php ext_icon.png ext_conf_template.txt config.qfq.example.php RELEASE.txt
DISTDIR=dist
......
......@@ -387,7 +387,7 @@ URL Parameters
Server Response
: header("Content-type: $mimetype");
header("Content-Length: $length");
header("Content-Disposition: inline; filename=\"$outputFilename\"");
header("Content-Disposition: inline; filename='$outputFilename'");
header("Pragma: no-cache");
header("Expires: 0");
file_get_contents($file);
......@@ -506,10 +506,10 @@ Server Response
Asynchronous request (read AJAX) initiated by the Client receive a
JSON Response from the server (extended [Minimal Response]) containing:
{
"status": "success"|"error"|"conflict"|"conflict_allow_force",
"message": "<message>"e5
}
: {
: "status": "success"|"error"|"conflict"|"conflict_allow_force",
: "message": "<message>"e5
: }
`status` indicates how the request has been fulfilled by the server.
On`"success"`, the Client display nothing to the user.
......
......@@ -130,7 +130,7 @@ Different browser prints the same page in different variations. To prevent this,
Provide a `print this page`-link (replace 'current pageId' )::
<a href="typo3conf/ext/qfq/qfq/api/print.php?id={current pageId}">Print this page</a>
<a href="typo3conf/ext/qfq/Source/api/print.php?id={current pageId}">Print this page</a>
Any parameter specified after `print.php` will be delivered to `wkhtmltopdf` as part of the URL.
......@@ -138,7 +138,7 @@ Typoscript code to implement a print link on every page::
10 = TEXT
10 {
wrap = <a href="typo3conf/ext/qfq/qfq/api/print.php?id=|&type=99"><span class="glyphicon glyphicon-print" aria-hidden="true"></span> Printview</a>
wrap = <a href="typo3conf/ext/qfq/Source/api/print.php?id=|&type=99"><span class="glyphicon glyphicon-print" aria-hidden="true"></span> Printview</a>
data = page:uid
}
......@@ -148,7 +148,7 @@ 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 `typo3conf/mail.log` and handles attachments
By default, `sendEmail` uses the local installed MTA, writes a logfile to `fileadmin/protected/log/mail.log` and handles attachments
via commandline options. A basic HTML email support is implemented.
The latest version is v1.56, which has at least one bug. That one is patched in the QFQ internal version v1.56p1 (see
......@@ -171,17 +171,17 @@ Usage: `column-thumbnail`_.
Setup
-----
* Install the extension via the Extensionmanager.
* Install the extension via the Extension Manager.
* If you install the extension by manual download/upload and get an error message
"can't activate extension": rename the downloaded zip file to `qfq.zip` or `qfq_<version>.zip` (e.g. version: 0.9.1).
"can't activate extension": rename the downloaded zip file to `qfq.zip` or `qfq_<version>.zip` (e.g. version: 18.12.0).
* If the Extensionmanager stops after importing: check your memory limit in php.ini.
* If the Extension Manager stops after importing: check your memory limit in php.ini.
* Copy/rename the file *<site path>/typo3conf/ext/qfq/config.example.qfq.php* to *config.qfq.php*.
* Copy/rename the file *<site path>/typo3conf/ext/qfq/config.example.qfq.php* to *<site path>/typo3conf/config.qfq.php*.
Configure the necessary settings `configuration`_
The configuration file is outside the of extension directory, to not loose it during updates.
* When the QFQ Extension is called the first time on the Typo3 Frontend, the file *<ext_dir>/qfq/sql/formEditor.sql* will
The configuration file is outside of the extension directory, to not loose it during de-install and install again.
* When the QFQ Extension is called the first time on the Typo3 frontend, the file *<ext_dir>/qfq/sql/formEditor.sql* will
played and fills the database with the *Form editor* records. This also happens automatically after each update of QFQ.
* Configure Typoscript to include Bootstrap, jQuery, QFQ javascript and CSS files.
......@@ -272,8 +272,8 @@ Setup a *report* to manage all *forms*:
.. _install-checklist:
Install Check List
------------------
Installation: Check List
------------------------
* Protect the directory `<T3 installation>/fileadmin/protected` in Apache against direct file access.
......@@ -337,14 +337,6 @@ Example: *typo3conf/config.qfq.php*: ::
// LDAP_1_PASSWORD =
];
After parsing the configuration, the following variables will be set automatically in STORE_SYSTEM:
+---------------+-----------------------------------------------------------------------------------+
| dbNameData | Can be used to dynamically access the current selected database: {{dbNameData:Y}} |
+---------------+-----------------------------------------------------------------------------------+
| dbNameQfq | Can be used to dynamically access the current selected database: {{dbNameQfq:Y}} |
+---------------+-----------------------------------------------------------------------------------+
.. _extension-manager-qfq-configuration:
Extension Manager: QFQ Configuration
......@@ -528,7 +520,7 @@ Extension Manager: QFQ Configuration
| cssClassColumnId | text-muted | A column in a subrecord with the name id|ID|Id gets this class. |
+-------------------------------+-------------------------------------------------------+----------------------------------------------------------------------------+
Automatically filled by QFQ:
After parsing the configuration, the following variables will be set automatically in STORE_SYSTEM:
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+
| Keyword | Description |
......@@ -5546,11 +5538,11 @@ Link Examples
+-----------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| SELECT "p:form_person|C:green" AS _link | <a href="?form_person"><img alttext="Check" src="typo3conf/ext/qfq/Resources/Public/icons/checked-green.gif"></a> |
+-----------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| SELECT "U:form=Person&r=123|x|D" as _link | <a href="typo3conf/ext/qfq/qfq/api/delete.php?s=badcaffee1234"><span class="glyphicon glyphicon-trash" ></span>"></a> |
| SELECT "U:form=Person&r=123|x|D" as _link | <a href="typo3conf/ext/qfq/Source/api/delete.php?s=badcaffee1234"><span class="glyphicon glyphicon-trash" ></span>"></a> |
+-----------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| SELECT "U:form=Person&r=123|x|t:Delete" as _link | <a href="typo3conf/ext/qfq/qfq/api/delete.php?s=badcaffee1234">Delete</a> |
| SELECT "U:form=Person&r=123|x|t:Delete" as _link | <a href="typo3conf/ext/qfq/Source/api/delete.php?s=badcaffee1234">Delete</a> |
+-----------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| SELECT "s:1|d:full.pdf|M:pdf|p:id=det1&r=12|p:id=det2|F:cv.pdf| | <a href="typo3conf/ext/qfq/qfq/api/download.php?s=badcaffee1234">Download</a> |
| SELECT "s:1|d:full.pdf|M:pdf|p:id=det1&r=12|p:id=det2|F:cv.pdf| | <a href="typo3conf/ext/qfq/Source/api/download.php?s=badcaffee1234">Download</a> |
| t:Download|a:Create complete PDF - please wait" as _link | |
+-----------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| SELECT "y:iatae3Ieem0jeet|t:Password|o:Clipboard|b" AS _link | <button class="btn btn-info" onClick="new QfqNS.Clipboard({text: 'iatae3Ieem0jeet'});" title='Copy to clipboard'>Password</button> |
......@@ -6740,7 +6732,7 @@ element. Such HTML element:
A `<div>` example HTML output (HTML send to the browser): ::
<div class="qfq-dnd-sort" data-dnd-api="typo3conf/ext/qfq/qfq/api/dragAndDrop.php?s=badcaffee1234">
<div class="qfq-dnd-sort" data-dnd-api="typo3conf/ext/qfq/Source/api/dragAndDrop.php?s=badcaffee1234">
<div class="anyClass" id="<uniq1>" data-dnd-id="55">
Numbero Uno
</div>
......@@ -6770,7 +6762,7 @@ A `<table>` based setup is also possible. Note the attribute `data-columns="3"`
which is the same column width as the outer table. ::
<table>
<tbody class="qfq-dnd-sort" data-dnd-api="typo3conf/ext/qfq/qfq/api/dragAndDrop.php?s=badcaffee1234" data-columns="3">
<tbody class="qfq-dnd-sort" data-dnd-api="typo3conf/ext/qfq/Source/api/dragAndDrop.php?s=badcaffee1234" data-columns="3">
<tr> class="anyClass" id="<uniq1>" data-dnd-id="55">
<td>Numbero Uno</td><td>Numbero Uno.2</td><td>Numbero Uno.3</td>
</tr>
......@@ -7355,7 +7347,7 @@ The `AutoCron` service fires periodically jobs like `open a webpage` (typically
actions) or `send mail`.
* AutoCron will be triggered via system cron. Minimal time distance therefore is 1 minute. If this is not sufficient,
any process who starts `.../typo3conf/ext/qfq/qfq/external/autocron.php` via `/usr/bin/php` frequently might be used.
any process who starts `.../typo3conf/ext/qfq/Source/external/autocron.php` via `/usr/bin/php` frequently might be used.
* Custom start time and frequency.
* Per job:
......@@ -7378,7 +7370,7 @@ Setup
Cron task: ::
* * * * * /usr/bin/php /var/www/html/typo3conf/ext/qfq/qfq/external/autocron.php
* * * * * /usr/bin/php /var/www/html/typo3conf/ext/qfq/Source/external/autocron.php
AutoCron Jobs of type 'website' needs the php.ini setting: ::
......
......@@ -975,7 +975,7 @@ abstract class AbstractBuildForm {
$statusHidden = ($formElement[FE_MODE] == 'hidden');
$pattern = null;
if ( isset($formElement[FE_CHECK_PATTERN]) && $formElement[FE_CHECK_PATTERN] != '') {
if (isset($formElement[FE_CHECK_PATTERN]) && $formElement[FE_CHECK_PATTERN] != '') {
$pattern = $statusHidden ? false : $formElement[FE_CHECK_PATTERN];
}
......@@ -1264,8 +1264,8 @@ abstract class AbstractBuildForm {
$value = '';
}
if ($formElement[FE_DECIMAL_FORMAT] !== '' ) {
if($value!=='') { // empty string causes exception in number_format()
if ($formElement[FE_DECIMAL_FORMAT] !== '') {
if ($value !== '') { // empty string causes exception in number_format()
$decimalScale = explode(',', $formElement[FE_DECIMAL_FORMAT])[1]; // scale: Nachkommastellen
$value = number_format($value, $decimalScale, '.', '');
}
......@@ -3247,6 +3247,7 @@ abstract class AbstractBuildForm {
*/
public function buildDateTime(array $formElement, $htmlFormElementName, $value, array &$json, $mode = FORM_LOAD) {
$attribute = '';
$placeholder = '';
$attribute .= Support::doAttribute('id', $formElement[FE_HTML_ID]);
$attribute .= Support::doAttribute('name', $htmlFormElementName);
......@@ -3312,8 +3313,10 @@ abstract class AbstractBuildForm {
$formElement[FE_PLACEHOLDER] = $placeholder;
}
if ($formElement[F_FE_DATA_PATTERN_ERROR] == '')
$formElement[F_FE_DATA_PATTERN_ERROR] = "Please match this format: $placeholder";
if ($formElement[F_FE_DATA_PATTERN_ERROR] == '') {
$formElement[F_FE_DATA_PATTERN_ERROR] = "Please match the format: " . $placeholder;
}
$attribute .= $this->getAttributeList($formElement, [F_FE_DATA_PATTERN_ERROR, F_FE_DATA_REQUIRED_ERROR, F_FE_DATA_MATCH_ERROR, F_FE_DATA_ERROR]);
$attribute .= $this->getAttributeList($formElement, [FE_INPUT_AUTOCOMPLETE, 'autofocus', 'placeholder']);
......
......@@ -12,7 +12,10 @@ const CONFIG_QFQ_PHP = "config.qfq.php"; // QFQ configuration file: db access
const CONFIG_T3 = 'LocalConfiguration.php'; // T3 config file
const GFX_INFO = 'typo3conf/ext/qfq/Resources/Public/icons/note.gif';
const API_DIR = 'typo3conf/ext/qfq/qfq/api';
const API_DIR = 'typo3conf/ext/qfq/Source/api';
const API_DIR_EXT = 'Source/api';
const PATH_ICONS = 'typo3conf/ext/qfq/Resources/Public/icons';
const QFQ_TEMP_FILE_PATTERN = 'qfq.split.XXXXX';
const QFQ_TEMP_SOURCE = '.temp.source';
......
......@@ -105,7 +105,7 @@ class HelperFile {
public static function getFileStat($pathFileName) {
$vars = array();
if (empty($pathFileName)) {
if (empty($pathFileName) || !file_exists ($pathFileName)) {
return array();
}
......@@ -133,7 +133,7 @@ class HelperFile {
return $pathFileName;
}
if (substr(getcwd(), -8) == '/qfq/api') {
if (substr(getcwd(), -8) == '/' . API_DIR_EXT) {
return '../../../../../' . $pathFileName;
}
......
......@@ -80,7 +80,7 @@ class Logger {
private static function relativeToT3Dir($filename) {
if (isset($filename[0]) && $filename[0] != '/') {
if (strpos(getcwd(), '/qfq/qfq/api') !== false) {
if (strpos(getcwd(), 'qfq/' . API_DIR_EXT) !== false) {
return ('../../../../../' . $filename);
}
}
......
<?php
define("EXTKEY", "qfq");
define("FORMREPORT", "formreport");
define("LENGTH_HASH", 32);
// dbalias of Extension DB
define("DB", "db");
define("T3", "t3");
// Constants for tx_form_pi1.php
define("FR_FORM", "tx_formreport_form");
define("FR_FORMELEMENT", "tx_formreport_formelement");
define("FR_LOCK", "tx_formreport_lock");
define("URL_HASH", "S_hash");
define("URL_RECORD_ID", "N_r");
define("URL_FORMNAME", "S_form");
define("URL_FORM", "URL");
// Definitions for doQuery()
//define("EXPECT_0", "expect_0");
//define("EXPECT_1", "expect_1");
//define("EXPECT_0_1", "expect_0_1");
//define("EXPECT_GE_0", "expect_ge_0");
//define("EXPECT_GE_1", "expect_ge_1");
define("EXPECT_SQL_OR_STRING", "expect_sql_or_string");
define("MERGE_NONE", "merge_none");
define("MERGE_ROW", "merge_row");
define("MERGE_ALL", "merge_all");
define("QUERY", "query");
// Definitions for sanitize() strip_tags
define("TAGS_NONE", "none");
define("TAGS_MARKUP", "markup");
define("TAGS_CUSTOM", "custom");
define("TAGS_ALL", "all");
// Definitions for sanitize() reaction on changed variables by sanitize them
define("TAGS_EXCEPTION", "exception");
define("TAGS_SANITIZE", "sanitize");
define("TAGS_IGNORE", "ignore");
// define("LIST_MARKUP_TAGS","<br><p><em><strong><code><samp><kbd><var><cite><dfn><abbr><acronym><q>");
define("LIST_MARKUP_TAGS", "<br><p><em><strong><font><b><u><i><span><div><ol><ul><li><code><samp><kbd><var><cite><dfn><abbr><acronym><q>");
define("DEBUG_SQL", "1");
define("DEBUG_BASIC", "2");
define("DEBUG_VERBOSE", "3");
define("DEBUG_EXTREME", "4");
// Set default values - overridden by ext_localconf.php
define("LOCK_RECORDS_INTERVAL", "300");
define("DFLT_UPLOAD_BASE_DIR", "fileadmin");
define("DFLT_UPLOAD_TMP_DIR", "fileadmin/tempfiles");
define("DFLT_UPLOAD_TMP_TTL", "300");
//define("PATH_ICONS", "typo3conf/ext/qfq/Resources/Public/icons/");
const PATH_ICONS = 'typo3conf/ext/qfq/Resources/Public/icons';
// Definitions to allow successful include of ext_localconf.
//define( 'TYPO3_MODE', '1' );
//define( 'FORMREPORT', '1' );
<?php
/***************************************************************
* Copyright notice
*
* (c) 2010 Glowbase GmbH
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
namespace qfq;
//use qfq;
/**
* syntaxException: Webmaster made a mistake in tt_content record or form definition
*
* @param string $message
* @param string $code
* @param string $file
* @param string $line
* @param string|array $customMessage =array() a) string: "key: value", b) array("key1: value1","key2: value2",
* ...) - all items will be displayed on an own line in the error message.
*/
class SyntaxReportException extends \Exception {
private $fr_error;
/**
* @param string $message
* @param int $code
* @param \Exception $previous
* @param $file
* @param $line
* @param array $customMessage
* @param array $fr_error
*/
public function __construct($message, $code, $previous, $file, $line, $customMessage = array(), $fr_error = array()) {
parent::__construct($message);
$this->code = $code;
$this->file = $file;
$this->line = $line;
$this->customMessage = $customMessage;
$this->fr_error = $fr_error;
}
/**
* @return string
* @throws CodeException
* @throws UserFormException
* @throws UserReportException
*/
public function errorMessage() {
$store = Store::getInstance();
// If '$this->customMessage' is a string, convert it to an array.
if ($this->customMessage && !is_array($this->customMessage))
$this->customMessage = [$this->customMessage];
//error message
if (Support::findInSet(SYSTEM_SHOW_DEBUG_INFO_YES, $store->getVar(SYSTEM_SHOW_DEBUG_INFO, STORE_SYSTEM))) {
$errorMsg = nl2br("<hr />Error: <strong>" . htmlentities($this->getMessage()) . "</strong><br />");
$errorMsg .= "Formreport statement: <strong>" . htmlentities($this->fr_error["row"]) . "</strong><br />";
// Print custom messages.
foreach ($this->customMessage as $value) {
$tmparr = explode(":", $value, 2);
$errorMsg .= $tmparr[0] . ":<strong>" . htmlentities($tmparr[1]) . "</strong><br />";
}
$errorMsg .= "T3 Page pid: <strong>" . $this->fr_error["pid"] . "</strong><br />";
$errorMsg .= "ttcontent record uid: <strong>" . $this->fr_error["uid"] . "</strong><br />";
$errorMsg .= "File: <strong>" . $this->file . "</strong><br />Line: <strong>" . $this->line . "</strong><br />MSG: <strong>" . $this->code . "</strong><br />";
$errorMsg .= "StackTrace<pre>" . nl2br($this->getTraceAsString()) . "</pre><hr />";
} else {
$errorMsg = "<hr />Error: <strong>" . htmlentities($this->getMessage()) . "</strong><hr />";
}
return $errorMsg;
} // errorMessage()
} // class syntaxException
/**
* sqlException: An SQL-Query returned an unexpected result
*
* @param string $message
* @param string $sql
* @param string $file
* @param string $line
*/
class SqlReportExceptionUnused extends \Exception {
private $fr_error;
/**
* @param string $message
* @param int $sql
* @param \Exception $file
* @param $line
* @param array $fr_error
*/
public function __construct($message, $sql, $file, $line, $fr_error = array()) {
parent::__construct($message);
$this->file = $file;
$this->line = $line;
$this->sql = $sql;
$this->fr_error = $fr_error;
}
/**
* @return string
*/
public function errorMessage() {
// global $BE_USER; TA: Du sollst kein global verwenden!!
$formreport = Session::get(FORMREPORT);
$beUserUid = ($formreport !== false && isset($formreport['be_user_uid'])) ? $formreport['be_user_uid'] : 0;
if ($GLOBALS['BE_USER']->user["uid"] > 0 || $beUserUid > 0) {
$errorMsg = nl2br("<hr />Error: <strong>" . htmlentities($this->getMessage()) . "</strong><br />MySQL: <strong>" . mysql_error() . "</strong><hr />");
$errorMsg .= "SQL: <strong>" . htmlentities($this->sql) . "</strong><hr />";
$errorMsg .= "Formreport: <strong>" . $this->fr_error["row"] . "</strong><hr />";
$errorMsg .= "T3 Page pid: <strong>" . $this->fr_error["pid"] . "</strong><br>";
$errorMsg .= "ttcontent record uid: <strong>" . $this->fr_error["uid"] . "</strong><br />";
$errorMsg .= "Line: <strong>" . $this->line . "</strong><br />File: <strong>" . $this->file . "</strong><hr />";
$errorMsg .= "StackTrace<pre>" . nl2br($this->getTraceAsString()) . "</pre><hr />";
} else {
$errorMsg = "<hr />Error: <strong>" . htmlentities($this->getMessage()) . "</strong><hr />";
}
return $errorMsg;
} // errorMessage()
} // class sqlException
/**
* codeException: Error in formreport code
*
* @param string $message
* @param string $file
* @param string $line
*/
class CodeReportException extends \Exception {
protected $file;
protected $line;
/**
* @param string $message
* @param string $file
* @param string $line
*/
public function __construct($message, $file = "undefined", $line = "undefined") {
parent::__construct($message);
$this->file = $file;
$this->line = $line;
}
/**
* @return string
*/
public function errorMessage() {
$formreport = Session::get(FORMREPORT);
$beUserUid = ($formreport !== false && isset($formreport['be_user_uid'])) ? $formreport['be_user_uid'] : 0;
if ($GLOBALS['BE_USER']->user["uid"] > 0 || $beUserUid > 0) {
$errorMsg = nl2br("<hr />Error: <strong>" . $this->getMessage() . "</strong><br />File: <strong>" . $this->file . "</strong><br />Line: <strong>" . $this->line . "</strong><hr />");
$errorMsg .= "StackTrace<pre>" . nl2br($this->getTraceAsString()) . "</pre><hr />";
} else {
$errorMsg = "<hr />Error: <strong>" . $this->getMessage() . "</strong><hr />";
}
return $errorMsg;
} // errorMessage()
} // class codeException
......@@ -25,7 +25,6 @@ namespace qfq;
//use qfq;
require_once(__DIR__ . '/Define.php');
require_once(__DIR__ . '/../store/Store.php');
require_once(__DIR__ . '/../store/Sip.php');
require_once(__DIR__ . '/../exceptions/UserReportException.php');
......
......@@ -77,7 +77,7 @@ class Monitor {
'&' . TOKEN_L_TAIL . '=' . $vars[TOKEN_L_TAIL] .
'&' . TOKEN_L_APPEND . '=' . $vars[TOKEN_L_APPEND];
// $url = store::getSipInstance()->queryStringToSip(API_DIR . '/' . API_DOWNLOAD_PHP . '?' . $queryString, RETURN_URL);
$arr = store::getSipInstance()->queryStringToSip('../../../qfq/api/' . API_DOWNLOAD_PHP . '?' . $queryString, RETURN_ARRAY);
$arr = store::getSipInstance()->queryStringToSip('../../../'. API_DIR_EXT . '/' . API_DOWNLOAD_PHP . '?' . $queryString, RETURN_ARRAY);
$url = $arr[SIP_SIP_URL];
// On page reload, take care to remove optional exsiting old seek position.
......
......@@ -25,9 +25,7 @@ namespace qfq;
//use qfq;
require_once(__DIR__ . '/Define.php');
require_once(__DIR__ . '/Variables.php');
//require_once(__DIR__ . '/Error.php');
require_once(__DIR__ . '/../database/Database.php');
require_once(__DIR__ . '/Link.php');
require_once(__DIR__ . '/SendMail.php');
......@@ -36,7 +34,6 @@ require_once(__DIR__ . '/../Evaluate.php');
require_once(__DIR__ . '/../helper/KeyValueStringParser.php');
require_once(__DIR__ . '/../helper/Token.php');
require_once(__DIR__ . '/Thumbnail.php');
//require_once(__DIR__ . '/Monitor.php');
const DEFAULT_QUESTION = 'question';
const DEFAULT_ICON = 'icon';
......@@ -571,12 +568,15 @@ class Report {
$sql = $this->variables->doVariables($this->frArray[$fullLevel . "." . TOKEN_ALT_SQL]);
if (!empty($sql)) {
$result = $this->db->sql($sql, ROW_KEYS, array(), '', $keys, $stat);
foreach ($result as $row) {
$rowIndex = 0;
$contentLevel .= $this->collectRow($row, $keys, $fullLevel, $rowIndex);
if(is_array($result)) {
foreach ($result as $row) {
$rowIndex = 0;
$contentLevel .= $this->collectRow($row, $keys, $fullLevel, $rowIndex);
}
}
}
}
$contentLevel .= $this->variables->doVariables($this->frArray[$fullLevel . "." . TOKEN_STAIL]);
$token = $this->frArray[$fullLevel . "." . TOKEN_CONTENT];
......
......@@ -147,8 +147,8 @@ class Variables {
}
if (isset($GLOBALS["TSFE"]->fe_user)) {
$arr["fe_user_uid"] = $GLOBALS["TSFE"]->fe_user->user["uid"] ?: '-';
$arr["fe_user"] = $GLOBALS["TSFE"]->fe_user->user["username"] ?: '-';
$arr["fe_user_uid"] = $GLOBALS["TSFE"]->fe_user->user["uid"] ?? '-';
$arr["fe_user"] = $GLOBALS["TSFE"]->fe_user->user["username"] ?? '-';
} else {
$arr["fe_user_uid"] = '-';
$arr["fe_user"] = '-';
......@@ -161,26 +161,6 @@ class Variables {
$arr["page_type"] = $GLOBALS["TSFE"]->type;
$arr["page_language_uid"] = $GLOBALS["TSFE"]->sys_language_uid;
}
// Add all variables from ext_localconf
// database aliases can be used in form sql queries (e.g. select * from "{{global.t3_name}}".fe_users...)
// localconf can be used to configure an application
$tmp = array();
if (isset($GLOBALS['TYPO3_CONF_VARS'][FORMREPORT])) {
$this->linearizeArray($GLOBALS['TYPO3_CONF_VARS'][FORMREPORT], $tmp);
}
// remove anything that contains "_password" "_username" in the key to prevent the webmaster from doing something stupid
foreach ($tmp as $key => $value) {
if (!strstr($key, "_password") && !strstr($key, "_username"))
$arr[$key] = $value;
}
// Add t3 db name too
// require(PATH_typo3conf.'localconf.php');
//TODO: $typo_db kommt von T3: PHPSTorm weiss das nicht und meckert hier. Es ist auch nicht gut das die globale Variable genommen wird. Umbauen auf etwas sinnvollerers!
//TODO: DBAlias sinnvoll setzen
$typo_db = '';
$arr["t3_name"] = $typo_db;
return ($arr);
}
......