diff --git a/extension/Classes/Core/Helper/HelperFile.php b/extension/Classes/Core/Helper/HelperFile.php index 8789e3c0c184908b80c30b92d5178db77ac3ccd6..5619f9c0c6cf2510d4c215ad5adcbd673690e00d 100644 --- a/extension/Classes/Core/Helper/HelperFile.php +++ b/extension/Classes/Core/Helper/HelperFile.php @@ -9,8 +9,6 @@ namespace IMATHUZH\Qfq\Core\Helper; - - /** * Class HelperFile * @package qfq @@ -517,5 +515,30 @@ class HelperFile { return $new; } + /** + * Joins $pre and $post. If $post is absolute, returns only $post. If $pre ends without '/', a '/' is injected. + * + * @param $pre + * @param $post + * + * @return string + */ + public static function joinPathFilename($pre, $post) { + $separator = ''; + + if ($pre == '' || $post == '') { + return $pre . $post; + } + + if ($post[0] == '/') { + return $post; + } + + if ((substr($pre, -1) != '/')) { + $separator = '/'; + } + + return $pre . $separator . $post; + } } diff --git a/extension/Classes/Core/Report/Report.php b/extension/Classes/Core/Report/Report.php index 13bd0939090f6f1bf2006b56dacaccc0667368bf..dda49138af3404759c9fda97aa9829068bb30d41 100644 --- a/extension/Classes/Core/Report/Report.php +++ b/extension/Classes/Core/Report/Report.php @@ -191,10 +191,7 @@ class Report { $sqlLog = $this->store->getVar(TYPO3_SQL_LOG, STORE_TYPO3); if (false !== $sqlLog) { - if ($sqlLog != '' && $sqlLog[0] !== '/') { - $sqlLog = $this->store->getVar(SYSTEM_EXT_PATH, STORE_SYSTEM) . '/' . $sqlLog; - } - + $sqlLog = HelperFile::joinPathFilename($this->store->getVar(SYSTEM_EXT_PATH, STORE_SYSTEM), $sqlLog); $this->store->setVar(SYSTEM_SQL_LOG, $sqlLog, STORE_SYSTEM); } @@ -249,7 +246,7 @@ class Report { * Split line in level, command, content and fill 'frArray', 'levelCount', 'indexArray' * Example: 10.50.5.sql = select * from person * - * @param string $ttLine : line to split in level, command, content + * @param string $ttLine : line to split in level, command, content * * @throws \UserReportException */ @@ -810,11 +807,11 @@ class Report { * 3) if none above take default * Set value on $full_level * - * @param string $level_key - 'db' or 'debug' - * @param string $full_super_level - f.e.: 10.10. - * @param string $full_level - f.e.: 10.10.10. - * @param string $cur_level - f.e.: 2 - * @param string $default - f.e.: 0 + * @param string $level_key - 'db' or 'debug' + * @param string $full_super_level - f.e.: 10.10. + * @param string $full_level - f.e.: 10.10.10. + * @param string $cur_level - f.e.: 2 + * @param string $default - f.e.: 0 * * @return string The calculated value. */ @@ -1219,8 +1216,8 @@ class Report { /** * Renders PageX: convert position content to token content. Respect default values depending on PageX * - * @param string $columnName - * @param string $columnValue + * @param string $columnName + * @param string $columnValue * @return string rendered link * * $columnValue: @@ -1347,9 +1344,9 @@ class Report { /** * If there is a value (or a defaultValue): compose it together with qualifier and delimiter. * - * @param string $qualifier - * @param string $value - * @param string $defaultValue + * @param string $qualifier + * @param string $value + * @param string $defaultValue * * @return string rendered link */ @@ -1369,8 +1366,8 @@ class Report { /** * Renders _pageX: extract token and determine if any default value has to be applied * - * @param string $columnName - * @param string $columnValue + * @param string $columnName + * @param string $columnValue * * @return string rendered link */ diff --git a/extension/Classes/Core/Save.php b/extension/Classes/Core/Save.php index fea100a401cae9e63e0cde32a675a18d0f995c84..886444cae4b6274f6ee793ced7195c907f2799be 100644 --- a/extension/Classes/Core/Save.php +++ b/extension/Classes/Core/Save.php @@ -72,8 +72,9 @@ class Save { $this->evaluate = new Evaluate($this->store, $this->db); $this->formAction = new FormAction($formSpec, $this->db); - $this->qfqLogFilename = $this->store->getVar(SYSTEM_SITE_PATH, STORE_SYSTEM) . '/' . $this->store->getVar(SYSTEM_QFQ_LOG, STORE_SYSTEM); - + $this->qfqLogFilename = HelperFile::joinPathFilename( + $this->store->getVar(SYSTEM_SITE_PATH, STORE_SYSTEM), + $this->store->getVar(SYSTEM_QFQ_LOG, STORE_SYSTEM)); } /** diff --git a/extension/Classes/Core/Store/Store.php b/extension/Classes/Core/Store/Store.php index b3b298e036c844fae96818db467366d5333a82f2..a39166e74b26dbe1e91f841a62fb24ca31dc2fc5 100644 --- a/extension/Classes/Core/Store/Store.php +++ b/extension/Classes/Core/Store/Store.php @@ -297,7 +297,7 @@ class Store { // Make path absolute foreach ([SYSTEM_MAIL_LOG, SYSTEM_QFQ_LOG, SYSTEM_SQL_LOG] AS $key) { if (!empty($config[$key]) && $config[$key][0] != '/') { - $config[$key] = $config[SYSTEM_SITE_PATH] . '/' . $config[$key]; + $config[$key] = HelperFile::joinPathFilename($config[SYSTEM_SITE_PATH], $config[$key]); } } diff --git a/extension/Tests/Unit/Core/Helper/HelperFileTest.php b/extension/Tests/Unit/Core/Helper/HelperFileTest.php index aa6da1c7eb215c29572c205aab92ad667cea9530..98ae13a4f53166a76e8847a522f6e1c37a74f69b 100644 --- a/extension/Tests/Unit/Core/Helper/HelperFileTest.php +++ b/extension/Tests/Unit/Core/Helper/HelperFileTest.php @@ -38,15 +38,34 @@ class HelperFileTest extends TestCase { $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.m.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_MATLAB,'')); $this->assertEquals(DIR_HIGHLIGHT_JSON . '/javascript.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_JAVASCRIPT,'fileadmin/test.js')); - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.qfq.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_QFQ,'fileadmin/test.js')); - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.py.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_PYTHON,'fileadmin/test.js')); - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.m.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_MATLAB,'fileadmin/test.js')); - - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/javascript.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO,'fileadmin/test.js')); - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.php.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO,'fileadmin/test.php')); - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.qfq.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO,'fileadmin/test.qfq')); - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.py.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO,'fileadmin/test.py')); - $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.m.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO,'fileadmin/test.m')); + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.qfq.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_QFQ, 'fileadmin/test.js')); + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.py.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_PYTHON, 'fileadmin/test.js')); + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.m.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_MATLAB, 'fileadmin/test.js')); + + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/javascript.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO, 'fileadmin/test.js')); + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.php.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO, 'fileadmin/test.php')); + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.qfq.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO, 'fileadmin/test.qfq')); + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.py.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO, 'fileadmin/test.py')); + $this->assertEquals(DIR_HIGHLIGHT_JSON . '/highlight.m.json', HelperFile::getFileTypeHighlight(FE_HIGHLIGHT_AUTO, 'fileadmin/test.m')); } + + public function testJoinPathFilename() { + + $this->assertEquals('', HelperFile::joinPathFilename('', '')); + $this->assertEquals('/', HelperFile::joinPathFilename('/', '')); + $this->assertEquals('/', HelperFile::joinPathFilename('', '/')); + $this->assertEquals('/', HelperFile::joinPathFilename('/', '/')); + + $this->assertEquals('a/b', HelperFile::joinPathFilename('a', 'b')); + $this->assertEquals('/a/b', HelperFile::joinPathFilename('/a', 'b')); + $this->assertEquals('/b', HelperFile::joinPathFilename('a', '/b')); + $this->assertEquals('/b', HelperFile::joinPathFilename('/a', '/b')); + + $this->assertEquals('a/b', HelperFile::joinPathFilename('a/', 'b')); + $this->assertEquals('a/b', HelperFile::joinPathFilename('a', 'b')); + $this->assertEquals('/b', HelperFile::joinPathFilename('a/', '/b')); + $this->assertEquals('/b', HelperFile::joinPathFilename('a', '/b')); + } + }