TYPO3 Forge: Issueshttp://forge.typo3.org/http://forge.typo3.org/themes/typo3_forge/favicon/favicon.png?17058661692015-02-26T17:56:44ZTYPO3 Forge
Redmine TYPO3 Core - Bug #65364 (Closed): _languageUid gets overwritten on updating a new domain object.http://forge.typo3.org/issues/653642015-02-26T17:56:44ZMarco Huber
<p>When creating a new domain object the property _languageUid is NULL. When this object gets persisted \TYPO3\CMS\Extbase\Persistence\Generic\Backend::insertObject() sets the language field to "-1" like it is described in the documentation <a class="external" href="http://docs.typo3.org/typo3cms/ExtbaseFluidBook/9-CrosscuttingConcerns/1-localizing-and-internationalizing-an-extension.html#multi-language-domain-objects">http://docs.typo3.org/typo3cms/ExtbaseFluidBook/9-CrosscuttingConcerns/1-localizing-and-internationalizing-an-extension.html#multi-language-domain-objects</a>. But after the insert the objects are updated (f.e. to insert missing relation ids and stuff) immediately and persisted again. \TYPO3\CMS\Extbase\Persistence\Generic\Backend::updateObject() sets "$row[$dataMap->getLanguageIdColumnName()] = $object->_getProperty('_languageUid');" and because the object's property _languageUid is NULL a 0 is inserted in the database.</p>
<p>So if the object was created in a multi language environment (sys_language_uid > 0) extbase doesn't find it anymore.</p>
<p><strong>Solution 1:</strong><br />Update the object's property _languageUid in \TYPO3\CMS\Extbase\Persistence\Generic\Backend::insertObject(). But this should be done only, if the developer hasn't set _languageUid himself (see FORGE). Then the update finds the -1 in the property _languageUid and everything works like it is documentated.</p>
<pre>
diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
index 8c6e3f0..b7f1efd 100644
--- a/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
+++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
@@ -635,6 +635,7 @@ class Backend implements \TYPO3\CMS\Extbase\Persistence\Generic\BackendInterface
$this->addCommonFieldsToRow($object, $row);
if ($dataMap->getLanguageIdColumnName() !== NULL && ($object->_getProperty('_languageUid') === NULL || !$object->_getProperty('_languageUid'))) {
$row[$dataMap->getLanguageIdColumnName()] = -1;
+ $object->_setProperty('_languageUid', -1);
}
if ($parentObject !== NULL && $parentPropertyName) {
$parentColumnDataMap = $this->dataMapper->getDataMap(get_class($parentObject))->getColumnMap($parentPropertyName);
</pre>
<p><strong>Solution 2:</strong><br />Do "$row[$dataMap->getLanguageIdColumnName()] = $object->_getProperty('_languageUid');" only if _languageUid is not NULL in \TYPO3\CMS\Extbase\Persistence\Generic\Backend::updateObject().</p>
<pre>
diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
index f3d89c9..c6aeb59 100644
--- a/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
+++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
@@ -850,7 +850,9 @@ class Backend implements \TYPO3\CMS\Extbase\Persistence\Generic\BackendInterface
$this->addCommonFieldsToRow($object, $row);
$row['uid'] = $object->getUid();
if ($dataMap->getLanguageIdColumnName() !== NULL) {
- $row[$dataMap->getLanguageIdColumnName()] = $object->_getProperty('_languageUid');
+ if($object->_getProperty('_languageUid') !== NULL){
+ $row[$dataMap->getLanguageIdColumnName()] = $object->_getProperty('_languageUid');
+ }
if ($object->_getProperty('_localizedUid') !== NULL) {
$row['uid'] = $object->_getProperty('_localizedUid');
}
</pre>
<p>I would prefer the first solution, because it seems cleaner to me. Or should both solutions be implemented?</p>
<p>If someone has a good idea for a commit message I will submit a patch to gerrit.</p> TYPO3 Core - Bug #65363 (Closed): Set _languageUid to -1 only if the developer hasn't set it himselfhttp://forge.typo3.org/issues/653632015-02-26T17:52:58ZMarco Huber
<p>When new domain objects get persisted the language field (sys_language_uid) is set to -1 in \TYPO3\CMS\Extbase\Persistence\Generic\Backend::insertObject(). There should be a check if the developer hasn't set it himself.</p>
<pre>
diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
index f3d89c9..8c6e3f0 100644
--- a/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
+++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php
@@ -633,7 +633,7 @@ class Backend implements \TYPO3\CMS\Extbase\Persistence\Generic\BackendInterface
$dataMap = $this->dataMapper->getDataMap(get_class($object));
$row = array();
$this->addCommonFieldsToRow($object, $row);
- if ($dataMap->getLanguageIdColumnName() !== NULL) {
+ if ($dataMap->getLanguageIdColumnName() !== NULL && ($object->_getProperty('_languageUid') === NULL || !$object->_getProperty('_languageUid'))) {
$row[$dataMap->getLanguageIdColumnName()] = -1;
}
if ($parentObject !== NULL && $parentPropertyName) {
</pre>
<p>If someone has a good idea for a commit message I will submit a patch to gerrit.</p> TYPO3 Core - Bug #60886 (Closed): Backend via https throws "SEC7111: HTTPS security is compromise...http://forge.typo3.org/issues/608862014-08-11T13:16:11ZMarco Huber
<p>Our beloved InternetExplorer has a problem with javascript:false as Ext.SSL_SECURE_URL.</p>
<p>When you open the backend, than there is a hidden iFrame (typo3-navigationIframe) with an empty src attribute and the IE uses javascript:false as src (default for Ext.SSL_SECURE_URL [1]). <br />When you open the backend via https, the IE wants to show res://ieframe.dll/dnserrordiagoff.htm because javascript:false is not a valid url. But this is detected as an unsecure resource. So you see this warning in the developer tools: "SEC7111: HTTPS security is compromised by res://ieframe.dll/dnserrordiagoff.htm"</p>
<p>Setting the URL to the clear.gif as Ext.SSL_SECURE_URL in typo3/sysext/core/Classes/Page/PageRenderer.php helps and doesn't create too much unnecessary traffic.</p>
<p>[1] <a class="external" href="http://dev.sencha.com/playpen/docs/output/Ext.html#SSL_SECURE_URL">http://dev.sencha.com/playpen/docs/output/Ext.html#SSL_SECURE_URL</a></p> TYPO3 Core - Bug #60805 (Closed): Cachingframework FileBackend not usable for cache_pages and cac...http://forge.typo3.org/issues/608052014-08-05T17:13:10ZMarco Huber
<p>If you want to use t3lib_cache_backend_FileBackend for cache_pages or cache_pagesection you get the Exception 1231267498 (typo3/sysext/core/Classes/Cache/Backend/AbstractBackend.php Line 86). This happens because the LocalConfiguration-array ist overwritten with the DefaultConfiguration somewhere. And in DefaultConfiguration the option "compress" is set. And "compress" is no valid option for t3lib_cache_backend_FileBackend.<br />To work around this issue you have to set "$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array();" in the AdditionalConfiguration.</p>
<p>Perhaps some other options for other cache backends produce this exception, too. I haven't testet that.</p>
<p>I don't know if this is really a bug, but at least it is very annoying and costed me some time to find out. :-)</p>
<p>LocalConfiguration:<br /><pre>
...
'SYS' => array(
'caching' => array(
'cacheConfigurations' => array(
'cache_pages' => array(
'backend' => 't3lib_cache_backend_FileBackend',
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'groups' => array('pages', 'all'),
),
'cache_pagesection' => array(
'backend' => 't3lib_cache_backend_FileBackend',
'frontend' => 't3lib_cache_frontend_VariableFrontend',
'groups' => array('pages', 'all'),
),
...
</pre></p>
<p>P.S.: I know, the wiki says that the FileBackend should not be used for cache_pages (<a class="external" href="http://wiki.typo3.org/Caching_framework#Cache_configurations">http://wiki.typo3.org/Caching_framework#Cache_configurations</a>), but we have to. :-)</p> TYPO3 Core - Feature #56236 (Closed): Allow multiple headers of the same type in config.additiona...http://forge.typo3.org/issues/562362014-02-24T13:39:30ZMarco Huber
<p>Sometimes you need to set multiple headers of the same type via config.additionalHeaders. As an example, I tried to set the X-Robots-Tag.<br /><pre>
mypage.config.additionalHeaders = X-Robots-Tag: noarchive|X-Robots-Tag: nosnippet
</pre><br />But only the last one is delivered, becaus you can't set the replace parameter of the PHP function header(). (See <a class="external" href="http://php.net/header">http://php.net/header</a>)</p> TYPO3 Core - Bug #53622 (Closed): Updating the file content fails with the FAL APIhttp://forge.typo3.org/issues/536222013-11-13T18:51:48ZMarco Huber
<p>Creating/Updating files with the FAL API fails because FAL want's to update a field sys_file.mimetype. But the field is called sys_file.mime_type in the database.</p>
<p>To reproduce:<br /><pre>
/** @var \TYPO3\CMS\Core\Resource\StorageRepository $storageRepository */
$storageRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\StorageRepository');
/** @var \TYPO3\CMS\Core\Resource\ResourceStorage $storage */
$storage = $storageRepository->findByUid(1);
//Create a file (or get an existing one, that makes no difference):
/** @var \TYPO3\CMS\Core\Resource\Folder $folder */
$folder = $storage->getFolder('/user_upload/');
$fileName = '123.txt';
$file = $storage->createFile($fileName, $folder); //A new record in sys_file is created and the file is created in the filesystem.
//Update the file
$fileContent = '12345filecontent';
$file->setContents($fileContent); //The file's content in the filesystem get's updated. But the mimetype changes and can not be updated in the database.
//this one throws the same error: $storage->setFileContents($file, $fileContent);
</pre></p>
<p>The error:<br /><pre>
exec_UPDATEquery
caller: TYPO3\CMS\Core\Database\DatabaseConnection::exec_UPDATEquery
ERROR: Unknown column 'mimetype' in 'field list'
lastBuiltQuery: UPDATE sys_file SET mimetype='text/plain' WHERE uid=2071
debug_backtrace:
include(ysext/extbase/Scripts/CommandLineLauncher.php),li_dispatch.phpsh#65
TYPO3\CMS\Extbase\Core\Bootstrap->run#32
TYPO3\CMS\Extbase\Core\Bootstrap->handleRequest#197
TYPO3\CMS\Extbase\Mvc\Cli\RequestHandler->handleRequest#208
TYPO3\CMS\Extbase\Mvc\Dispatcher->dispatch#96
TYPO3\CMS\Extbase\Mvc\Controller\CommandController->processRequest#100
TYPO3\CMS\Extbase\Mvc\Controller\CommandController->callCommandMethod#114
call_user_func_array#212
BGM\MyExt\Command\MyCommandController->createFileCommand#
TYPO3\CMS\Core\Resource\File->setContents#84
TYPO3\CMS\Core\Resource\ResourceStorage->setFileContents#140
TYPO3\CMS\Core\Resource\FileRepository->update#952
TYPO3\CMS\Core\Database\DatabaseConnection->exec_UPDATEquery#263
TYPO3\CMS\Core\Database\DatabaseConnection->debug#247
</pre></p>
<p>The problem is $file->setContents which calls TYPO3\CMS\Core\Resource\FileRepository->update, but I have no idea how to fix this.</p> TYPO3 Core - Feature #35945 (Closed): css_styled_content CE "Menu/Sitemap": new menu type "Sitema...http://forge.typo3.org/issues/359452012-04-13T11:34:35ZMarco Huber
<p>It would be nice to be able to select the root page for the sitemap. Because the current menu type "Sitemap" always uses the tree root. Therefor we could use the field "Selected Pages".</p> TYPO3 Core - Bug #35944 (Closed): css_styled_content CE "Menu/Sitemap": Hide the field "Selected ...http://forge.typo3.org/issues/359442012-04-13T11:28:28ZMarco Huber
<p>Because the Typoscript for the menu type "Sitemap" doesn't mind if there is something inserted in the field "Selected Pages" the field should not be shown in the backend.</p> TYPO3 Core - Feature #34597 (Closed): Disable forgot password formshttp://forge.typo3.org/issues/345972012-03-06T17:51:20ZMarco Huber
<p>If there are two login forms on a page (usecases described here: <a class="external" href="http://forge.typo3.org/issues/26910">http://forge.typo3.org/issues/26910</a>) the forgot feature does not work because the last generated forgot_hash overwrites all previous generated hashes in the session. This is already discussed here <a class="external" href="http://forge.typo3.org/issues/26910">http://forge.typo3.org/issues/26910</a> and I aggree that "it's nonsense and a sign of bad design if there are two forgot password forms on the same page" (<a class="external" href="http://forge.typo3.org/issues/26910#note-5">http://forge.typo3.org/issues/26910#note-5</a>).</p>
<p>So it would be nice to disable the forgot feature for one of the two login forms, perhaps by introducing two new Typoscript options "disableForgot" and "disableChangePassword" which simply disable the execution of the showForgot and changePassword functions.</p>
<p>I will create a patch for this later and send it to gerrit...</p> TYPO3 Core - Bug #25888 (Closed): TCA Tree readOnly not workinghttp://forge.typo3.org/issues/258882011-04-11T15:09:49ZMarco Huber
<p>The TCA Tree isn't disabled if $PA['fieldConf']['config']['readOnly'] is true.</p> TYPO3 Core - Feature #25382 (Closed): TCA Tree should respect $TCA['myTable']['ctrl']['requestUpd...http://forge.typo3.org/issues/253822011-03-24T09:44:04ZMarco Huber
<p>The onChange-Javascript is missing. I will push a patch to gerrit as soon as possible.</p>
<p>(issue imported from #M18022)</p> TYPO3 Core - Bug #25347 (Closed): TCA type "select", renderMode "tree", maxitems = 1 doesn't workhttp://forge.typo3.org/issues/253472011-03-16T16:53:26ZMarco Huber
<p>I want to use the new TCA tree, but when I configure 1 as maxitems I can't select a tree node.</p>
<p>This happens, because this.countSelectedNodes in t3lib\js\extjs\tree\tree.js is 1 even when I create a new record. And this.countSelectedNodes is 1 because $valueArray in t3lib\tceforms\class.t3lib_tceforms_tree.php in the function renderField always has at least one entry.</p>
<p>$valueArray is created by exploding $PA['itemFormElValue']. In fresh records $PA['itemFormElValue'] is 0 and not NULL (or not set) and has no other effects. But $valueArray has an entry and that's why count($valueArray) is 1 and then this.countSelectedNodes is also 1.</p>
<p>To fix this issue $PA['itemFormElValue'] should be only exploded when it's not 0. Like I worte, this is done in t3lib\tceforms\class.t3lib_tceforms_tree.php and fixed in the appended patch.</p>
<p>Fixing this issue causes a little follow up in t3lib\js\extjs\tree\tree.js. This is also fixed in the patch.</p>
<p>I hope the patch file's syntax is correct, this is my first git patch ;-)</p>
<p>(issue imported from #M17976)</p> TYPO3 Core - Bug #24877 (Closed): rsaauth with more than one login form on one page doesn't workhttp://forge.typo3.org/issues/248772011-01-28T14:19:12ZMarco Huber
<p>If you have more than one login form on one page only the last rendered login form will work. This happens because when the second login form is rendered the created private key overwrites the first form's private key. This problem is also described on forge: <a class="external" href="http://forge.typo3.org/issues/6708">http://forge.typo3.org/issues/6708</a></p>
<p>In my patch the class tx_rsaauth_keypair is a singleton so that it will be used only one time. The patch also changes the backend classes to check if the class tx_rsaauth_keypair was already called. And it adds some error handling.</p>
<p>The patch is created against TRUNK revision 10349.</p>
<p>Kind regards,<br />Marco</p>
<p>(issue imported from #M17388)</p> TYPO3 Core - Bug #22625 (Closed): Little bug in Workspace Manager when the option "Show differenc...http://forge.typo3.org/issues/226252010-05-10T15:05:16ZMarco Huber
<p>When you select the option "Show differences inline" the percentage of changes is shown twice and incorrect. See this screenshot: <a class="external" href="http://img140.imageshack.us/img140/8586/workspaceerror.jpg">http://img140.imageshack.us/img140/8586/workspaceerror.jpg</a></p>
<p>File locallang_mod_user_ws.xml.diff fixes charset-problem<br />File class.wslib_gui.php.diff removes first (and unnecessary output)<br />(issue imported from #M14354)</p> TYPO3 Core - Bug #20706 (Closed): Russian chars in the comments are encoded wrong when changing t...http://forge.typo3.org/issues/207062009-07-01T14:35:43ZMarco Huber
<p>In the Versioning-Modul:<br />When you change the stage for an element, for example sending it to the reviewer, a javascript popup box opens where you can enter a comment. When you enter russian chars they aren't stored correct. This is because the comment is sended through the javascript function escape().<br />The better way is to send it through encodeURI(), or perhaps through encodeURIComponent().<br />So you have to replace the string escape(commentTxt) with encodeURI(commentTxt) in the file typo3/sysext/version/cm1/index.php. You'll find it three times in this files.<br />Perhaps there are some more files where you have to replace it. Until now I only found this one.<br />It would be nice if this little change would find its way to the next TYPO3-Versions... ;-)</p>
<p>(issue imported from #M11458)</p>