TYPO3 Forge: Issueshttp://forge.typo3.org/http://forge.typo3.org/themes/typo3_forge/favicon/favicon.png?17058661692023-06-15T05:24:09ZTYPO3 Forge
Redmine TYPO3 Core - Feature #101077 (New): Improve administrative handling of "Anonymize IP Adresses"http://forge.typo3.org/issues/1010772023-06-15T05:24:09ZSybille Peterssypets@gmx.de
<ul>
<li>currently it is only possible to select 1 table in the task (but more can be configured in ext_localconf.php)</li>
<li>the task is a scheduler task which means you have to create a scheduler task first, you can't just run it from the console (which means extra work and you can't (easily) store the configuration in a Git repo)</li>
</ul>
<a name="Sugestions"></a>
<h2 >Sugestions<a href="#Sugestions" class="wiki-anchor">¶</a></h2>
<ul>
<li>make a Symfony command out of it</li>
<li>make it possible to run it with "all configured tables" which would use all tables in $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks'][self::class]['options']</li>
</ul>
<p>In the "Table garbage collection" task there is a checkbox "Clean all available tables"</p>
<a name="Side-note"></a>
<h2 >Side note<a href="#Side-note" class="wiki-anchor">¶</a></h2>
<p>It is unclear to me whether all current scheduler tasks will be migrated to Symfony commands in the future.</p> TYPO3 Core - Task #100299 (Closed): Shorten texts for webhooks descriptionhttp://forge.typo3.org/issues/1002992023-03-25T09:10:10ZSybille Peterssypets@gmx.de
<pre>
<trans-unit id="sys_webhook.description.description" resname="sys_webhook.description.description">
<source>Additional information about the webhook for your internal reference.</source>
</trans-unit>
</pre><br />Suggestion:
<pre>
- Additional information about the webhook for your internal reference.
+ Additional information about the webhook.
</pre>
<p>I noticed this when adding some translation suggestions in Crowdin. This appeared difficult to translate because I was not sure what "for your internal reference" means in this context. And it seems to add little value.</p>
<p>Also, some of the desciptions end with a dot and and some don't.</p> TYPO3 Core - Task #99157 (Under Review): Performance optimize sitemap.xml generationhttp://forge.typo3.org/issues/991572022-11-21T18:32:02ZSybille Peterssypets@gmx.de
<p>Loading sitemap.xml seemed slow, had load time of more than 20s (see measurements below of over a minute).</p>
<p>- the cache duration (seo_sitemap.config.cache_period) for sitemaps is by default 900 (15 minutes) which seems very short as the average page cache time is 24h. While having a fresh sitemap is of course prefereable. But, due to the long load time, this means the sitemap is effectively broken on large sites, until it is warmed up again. (the cache duration can of course be overridden but it remains the default)<br /> - There is an SQL fetch with select * (all fields) . It is probably not necessary to fetch all the fields.</p>
<pre><code class="sql syntaxhl" data-language="sql"><span class="k">SELECT</span> <span class="o">*</span> <span class="k">FROM</span> <span class="nv">`pages`</span> <span class="k">WHERE</span> <span class="p">(</span><span class="nv">`uid`</span> <span class="k">IN</span> <span class="p">(</span><span class="mi">57119</span> <span class="p">...))</span> <span class="k">AND</span> <span class="p">(</span><span class="n">no_index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">AND</span> <span class="p">(</span><span class="nv">`doktype`</span> <span class="k">NOT</span> <span class="k">IN</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">199</span><span class="p">,</span> <span class="mi">254</span><span class="p">,</span> <span class="mi">255</span><span class="p">))</span> <span class="k">AND</span> <span class="p">((</span><span class="nv">`pages`</span><span class="p">.</span><span class="nv">`deleted`</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">AND</span> <span class="p">(</span><span class="nv">`pages`</span><span class="p">.</span><span class="nv">`hidden`</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">AND</span> <span class="p">(</span><span class="nv">`pages`</span><span class="p">.</span><span class="nv">`starttime`</span> <span class="o"><=</span> <span class="mi">1669052220</span><span class="p">)</span> <span class="k">AND</span> <span class="p">((</span><span class="nv">`pages`</span><span class="p">.</span><span class="nv">`endtime`</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">OR</span> <span class="p">(</span><span class="nv">`pages`</span><span class="p">.</span><span class="nv">`endtime`</span> <span class="o">></span> <span class="mi">1669052220</span><span class="p">)))</span> <span class="k">ORDER</span> <span class="k">BY</span> <span class="nv">`uid`</span> <span class="k">ASC</span>
</code></pre>
<p>This alone does not contribute to the long load time, but it might be possible to make some of the SQL queries more efficient.</p>
<a name="System"></a>
<h2 >System<a href="#System" class="wiki-anchor">¶</a></h2>
<p>- TYPO3 11.5.19<br />- pages in sitemap (default language): ~25000<br />- also news in sitemap (default language): ~15000</p>
<a name="Measurements"></a>
<h2 >Measurements<a href="#Measurements" class="wiki-anchor">¶</a></h2>
<p>Feching the individual sitemaps for translated pages seems especially slow.</p>
<p>After a full cache flush:</p>
<ul>
<li>URL (for page 5): <a class="external" href="https://mysite/en/sitemap.xml?page=5&sitemap=pages&cHash=179f57abab819f22b0581465651db76d">https://mysite/en/sitemap.xml?page=5&sitemap=pages&cHash=179f57abab819f22b0581465651db76d</a></li>
<li>Time: <strong>1 minute, 26 seconds</strong></li>
</ul>
<p>(default language is German, English is translation)</p>
<a name="DB-queries"></a>
<h2 >DB queries<a href="#DB-queries" class="wiki-anchor">¶</a></h2>
<p>SELECT * FROM `pages` WHERE (`uid` IN (57119 ...)) AND (no_index = 0) AND (`doktype` NOT IN (3, 4, 6, 7, 199, 254, 255)) AND ((`pages`.`deleted` = 0) AND (`pages`.`hidden` = 0) AND (`pages`.`starttime` <= 1669052220) AND ((`pages`.`endtime` = 0) OR (`pages`.`endtime` > 1669052220))) ORDER BY `uid` ASC;</p> TYPO3 Core - Bug #96746 (Closed): Make it possible to warmup sitemaps (e.g. sitemap.xml) without ...http://forge.typo3.org/issues/967462022-02-04T12:38:02ZSybille Peterssypets@gmx.de
<p>I regularly get error messages because of timeout for sitemap.xml and sitemap_en.xml etc. in the TYPO3 logs</p>
<p>I already set the timeout to 20s (which is absurdly high). I regularly look at the error messages in the logs and solve them. I can filter out this message, but better would be to be able to warmup the sitemaps after flushing of cache without error messages.</p>
<pre>
Fri, 04 Feb 2022 10:45:28 +0100 [CRITICAL] request="c5a457a50c3c9" component="TYPO3.CMS.Core.Error.ProductionExceptionHandler": Core: Exception handler (WEB): Uncaught TYPO3 Exception: cURL error 28: Operation timed out after
20001 milliseconds with 0 out of -1 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) | GuzzleHttp\Exception\ConnectException thrown in file /var/www/mysite/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php in line 200. Requested URL: https://mysite/sitemap_en.xml - {"TYPO3_MODE":"FE","exception":"GuzzleHttp\\Exception\\ConnectException: cURL error 28: Operation timed out after 20001 milliseconds with 0 out of -1 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in /var/www/mysite/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:200
Stack trace:
#0 /var/www/mysite/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(155): GuzzleHttp\\Handler\\CurlFactory::createRejection(Object(GuzzleHttp\\Handler\\EasyHandle), Array)
#1 /var/www/mysite/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(105): GuzzleHttp\\Handler\\CurlFactory::finishError(Object(GuzzleHttp\\Handler\\CurlHandler), Object(GuzzleHttp\\Handler\\EasyHandle), Object(GuzzleHttp\\Handle
r\\CurlFactory))
#2 /var/www/mysite/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(43): GuzzleHttp\\Handler\\CurlFactory::finish(Object(GuzzleHttp\\Handler\\CurlHandler), Object(GuzzleHttp\\Handler\\EasyHandle), Object(GuzzleHttp\\Handler\\CurlFactory))
#3 /var/www/mysite/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(28): GuzzleHttp\\Handler\\CurlHandler->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#4 /var/www/mysite/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(51): GuzzleHttp\\Handler\\Proxy::GuzzleHttp\\Handler\\{closure}(Object(GuzzleHttp\\Psr7\\Request), Array)
#5 /var/www/mysite/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(37): GuzzleHttp\\Handler\\Proxy::GuzzleHttp\\Handler\\{closure}(Object(GuzzleHttp\\Psr7\\Request), Array)
#6 /var/www/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php(29): GuzzleHttp\\PrepareBodyMiddleware->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#7 /var/www/mysite/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(70): GuzzleHttp\\Middleware::GuzzleHttp\\{closure}(Object(GuzzleHttp\\Psr7\\Request), Array)
#8 /var/www/mysite/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(107): GuzzleHttp\\RedirectMiddleware->__invoke(Object(GuzzleHttp\\Psr7\\Request), Array)
#9 /var/www/mysite/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(72): GuzzleHttp\\RedirectMiddleware->checkRedirect(Object(GuzzleHttp\\Psr7\\Request), Array, Object(GuzzleHttp\\Psr7\\Response))
#10 /var/www/mysite/vendor/guzzlehttp/promises/src/FulfilledPromise.php(41): GuzzleHttp\\RedirectMiddleware->GuzzleHttp\\{closure}(Object(GuzzleHttp\\Psr7\\Response))
#11 /var/www/mysite/vendor/guzzlehttp/promises/src/TaskQueue.php(48): GuzzleHttp\\Promise\\FulfilledPromise::GuzzleHttp\\Promise\\{closure}()
#12 /var/www/mysite/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\\Promise\\TaskQueue->run(true)
#13 /var/www/mysite/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\\Promise\\Promise->invokeWaitFn()
#14 /var/www/mysite/vendor/guzzlehttp/promises/src/Promise.php(269): GuzzleHttp\\Promise\\Promise->waitIfPending()
#15 /var/www/mysite/vendor/guzzlehttp/promises/src/Promise.php(226): GuzzleHttp\\Promise\\Promise->invokeWaitList()
#16 /var/www/mysite/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\\Promise\\Promise->waitIfPending()
#17 /var/www/mysite/vendor/guzzlehttp/guzzle/src/Client.php(182): GuzzleHttp\\Promise\\Promise->wait()
#18 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/RequestFactory.php(55): GuzzleHttp\\Client->request('GET', 'https://mysite/...', Array)
#19 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/StaticRouteResolver.php(131): TYPO3\\CMS\\Core\\Http\\RequestFactory->request('https://mysite/...')
#20 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/StaticRouteResolver.php(186): TYPO3\\CMS\\Frontend\\Middleware\\StaticRouteResolver->getFromUri('https://mysite/...')
#21 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/StaticRouteResolver.php(72): TYPO3\\CMS\\Frontend\\Middleware\\StaticRouteResolver->resolveByType(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(TYPO3\\CMS\\Core\\Site\\Entity\\Site), 'uri', Array)
#22 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\StaticRouteResolver->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#23 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/SiteBaseRedirectResolver.php(94): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#24 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\SiteBaseRedirectResolver->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#25 /var/www/mysite/htdocs/typo3conf/ext/secure_downloads/Classes/Middleware/FileDeliveryMiddleware.php(58): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#26 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): Bitmotion\\SecureDownloads\\Middleware\\FileDeliveryMiddleware->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#27 /var/www/mysite/htdocs/typo3/sysext/adminpanel/Classes/Middleware/AdminPanelInitiator.php(55): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#28 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Adminpanel\\Middleware\\AdminPanelInitiator->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#29 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/FrontendUserAuthenticator.php(77): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#30 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\FrontendUserAuthenticator->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#31 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/BackendUserAuthenticator.php(66): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#32 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\BackendUserAuthenticator->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#33 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/MaintenanceMode.php(55): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#34 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\MaintenanceMode->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#35 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/SiteResolver.php(65): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#36 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\SiteResolver->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#37 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/EidHandler.php(64): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#38 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\EidHandler->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#39 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Middleware/NormalizedParamsAttribute.php(45): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#40 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Core\\Middleware\
ormalizedParamsAttribute->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#41 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Middleware/TimeTrackerInitialization.php(58): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#42 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(172): TYPO3\\CMS\\Frontend\\Middleware\\TimeTrackerInitialization->process(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest), Object(class@anonymous))
#43 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/MiddlewareDispatcher.php(78): class@anonymous->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#44 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/AbstractApplication.php(85): TYPO3\\CMS\\Core\\Http\\MiddlewareDispatcher->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#45 /var/www/mysite/htdocs/typo3/sysext/frontend/Classes/Http/Application.php(69): TYPO3\\CMS\\Core\\Http\\AbstractApplication->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#46 /var/www/mysite/htdocs/typo3/sysext/core/Classes/Http/AbstractApplication.php(97): TYPO3\\CMS\\Frontend\\Http\\Application->handle(Object(TYPO3\\CMS\\Core\\Http\\ServerRequest))
#47 /var/www/mysite/htdocs/index.php(25): TYPO3\\CMS\\Core\\Http\\AbstractApplication->run()
#48 /var/www/mysite/htdocs/index.php(26): {closure}()
#49 {main}","context":"FE","url":"https://mysite/sitemap_en.xml"}
</pre> TYPO3 Core - Task #96163 (Closed): Replace currentworkingdir in phpstan.neon?http://forge.typo3.org/issues/961632021-11-30T13:19:07ZSybille Peterssypets@gmx.de
<blockquote>
<p>There are two predefined parameters usable to expand in config parameters that represent paths:</p>
</blockquote>
<blockquote>
<p><span>rootDir</span> - root directory where PHPStan resides (i.e. vendor/phpstan/phpstan in Composer installation)<br /><span>currentWorkingDirectory</span> - current working directory where PHPStan was executed<br />These are no longer very useful as all relative paths in config parameters are resolved based on the directory of the config file is in, resulting in a short and concise notation.</p>
</blockquote>
<p>Thus, you don't need currentworkingdir. You can write the path relative to the path the .neon file is in, it does not matter where phpstan is executed.</p>
<p><a class="external" href="https://phpstan.org/config-reference#expanding-paths">https://phpstan.org/config-reference#expanding-paths</a></p> TYPO3 Core - Bug #95189 (Closed): Padding with TypoScript strPad does not work correctly with mul...http://forge.typo3.org/issues/951892021-09-11T15:49:07ZSybille Peterssypets@gmx.de
<p>When using strings with multibyte characters, the strings are not padded correctly with TypoScript <strong>strPad</strong>.</p>
<p>The result is the same as with PHP str_pad() which also does not work correctly with multibyte characters (as str_pad() is used under the hood).</p>
<a name="Example-Reproduce"></a>
<h2 >Example: Reproduce<a href="#Example-Reproduce" class="wiki-anchor">¶</a></h2>
<p>TypoScript</p>
<pre>
page >
page = PAGE
page.30 = TEXT
page.30.value = hellö
page.30.value.strPad {
length = 10
padWith = *
type = both
}
page.40 = TEXT
page.40.value = <br/>
page.50 = TEXT
page.50.value = hello
page.50.value.strPad {
length = 10
padWith = *
type = both
}
</pre>
<a name="Result"></a>
<h2 >Result<a href="#Result" class="wiki-anchor">¶</a></h2>
<pre>
**hellö**
**hello***
</pre>
<a name="Expected-result"></a>
<h2 >Expected result<a href="#Expected-result" class="wiki-anchor">¶</a></h2>
<pre>
**hellö***
**hello***
</pre>
<a name="Versions"></a>
<h2 >Versions<a href="#Versions" class="wiki-anchor">¶</a></h2>
<ul>
<li>TYPO3 10.4 (latest)</li>
<li>TYPO3 master (11-dev)</li>
</ul> TYPO3 Core - Task #92223 (Closed): Build/Scripts/runTests.sh -s lintTypescript does not find task...http://forge.typo3.org/issues/922232020-09-07T19:21:07ZSybille Peterssypets@gmx.de
<p>The script runTests.sh runs with Docker. It does not find the task "tslint"</p>
<pre><code class="text syntaxhl" data-language="text">Build/Scripts/runTests.sh -s lintTypescript
Creating network "local_default" with the default driver
yarn install v1.21.1
[1/5] Validating package.json...
[2/5] Resolving packages...
success Already up-to-date.
$ patch-package
patch-package 6.2.2
Applying patches...
No patch files found
Done in 1.59s.
Warning: Task "tslint" not found. Use --force to continue.
Aborted due to warnings.
</code></pre> TYPO3 Core - Bug #90830 (Closed): SEO documentation: Example "Setting fallbacks for og:image and ...http://forge.typo3.org/issues/908302020-03-25T14:13:00ZSybille Peterssypets@gmx.de
<p>Documentation issue (copied from theme repo: <a class="external" href="https://github.com/TYPO3-Documentation/t3SphinxThemeRtd/issues/149">https://github.com/TYPO3-Documentation/t3SphinxThemeRtd/issues/149</a>)</p>
<blockquote>
<p>Dear documentation editor,<br />thanks for your example "Setting fallbacks for og:image and twitter:image". It is exactly the solution for my problem, but this example does not work. IMG_RESOURCE returns the image path widthout baseurl. OpenGraph needs an absolute path incl. protocoll and domain. It would be nice, if the example would work correctly.</p>
</blockquote>
<blockquote>
<p>Thank you<br />Martin</p>
</blockquote>
<p><a class="external" href="https://docs.typo3.org/c/typo3/cms-seo/master/en-us/Configuration/Index.html">https://docs.typo3.org/c/typo3/cms-seo/master/en-us/Configuration/Index.html</a></p> TYPO3 Core - Bug #88316 (Closed): Do not set type attribute by default in script tag for page.inc...http://forge.typo3.org/issues/883162019-05-09T11:59:13ZSybille Peterssypets@gmx.de
<p><a class="external" href="https://docs.typo3.org/typo3cms/TyposcriptReference/latest/Setup/Page/#includejs-array">https://docs.typo3.org/typo3cms/TyposcriptReference/latest/Setup/Page/#includejs-array</a></p>
<p>A script element with <strong>type="text/javascript"</strong> is generated by default. This is unnecessary and <a href="https://validator.w3.org" class="external">w3c validator</a> generates warnings.</p> TYPO3 Core - Task #86730 (Closed): Update php-cs-fixer configuration to exclude _generated direct...http://forge.typo3.org/issues/867302018-10-24T09:49:30ZSybille Peterssypets@gmx.de
<ul>
<li>acceptance tests may create _generated directories (e.g. typo3/sysext/core/Tests/Acceptance/Support/_generated/)</li>
<li>configuration Build/.php_cs</li>
<li>(used by Build/Scripts/cglFixMyCommit.sh) </li>
<li>used by new docker composed based test scenario (<a class="external" href="https://review.typo3.org/c/57789/">https://review.typo3.org/c/57789/</a>)</li>
</ul> TYPO3 Core - Task #84836 (Closed): Create a template with best practices for php files in Build/S...http://forge.typo3.org/issues/848362018-04-22T15:00:55ZSybille Peterssypets@gmx.de
<p>Some of the existing scripts in Build/Scripts have been converted to PHP. New scripts will be created. It might be good to have a template which includes some best practices, e.g.</p>
<ul>
<li>security: abort script if not called from command line</li>
<li>handle command line arguments</li>
<li>Apply <a href="https://www.php-fig.org/psr/psr-1/#23-side-effects" class="external">PSR-1 2.3 Side Effects</a> ? Which could mean do not define class and execute it in one file. </li>
<li>... more?</li>
</ul>
<p>This script could continuously be refined and the other scripts updated at least for critical and security-related things.</p> TYPO3 Core - Task #84733 (Closed): Optimize comands for executing tests with docker in core contr...http://forge.typo3.org/issues/847332018-04-15T12:16:09ZSybille Peterssypets@gmx.de
<p>As suggested by Josef Glatz in the #bamboo channel, we would like to simplify the execution of commands for running the phpunit tests with docker.</p>
<p>In order to do this we can supply some scripts and configuration files:</p>
<ul>
<li>File that sets db credentials for functional tests as environment variables (see Build/bamboo/src/main/java/core/AbstractCoreSpec.java for already existing database credentials)</li>
<li>execute commands via composer (or grunt?) by defining them in composer.json or Build/package.json</li>
</ul>
<p>see also contribution guide for more information:</p>
<pre><code class="text syntaxhl" data-language="text">
composer run-script unittests
composer run-script functests
</code></pre> TYPO3 Core - Task #84197 (Closed): Convert validateRstFiles.sh to PHPhttp://forge.typo3.org/issues/841972018-03-11T10:43:07ZSybille Peterssypets@gmx.deTYPO3 Core - Task #83891 (Closed): Put commit hooks in the Build/Scripts directory. http://forge.typo3.org/issues/838912018-02-14T10:33:36ZSybille Peterssypets@gmx.de
<p>The commit-msg hook is currently hosted on <a class="external" href="https://typo3.org/fileadmin/resources/git/commit-msg.txt">https://typo3.org/fileadmin/resources/git/commit-msg.txt</a>. It would be a good idea to put it into the Build/Scripts/ directory.</p>
<p>Also:</p>
<ul>
<li>Change link to wiki to point to contribution guide</li>
<li>check license terms (ASF)</li>
<li>add another pre-commit hook to check for cgl (possibly run `Build/Scripts/cglFixMyCommit.sh dryrun`)</li>
<li>Update the <a href="https://docs.typo3.org/typo3cms/ContributionWorkflowGuide/latest/singlehtml/Index.html#git-setup-precommithook" class="external">commit hook</a> section in the contribution docs to reflect this change </li>
<li>add a post-checkout hook as suggested in the "contribution guide": <a class="external" href="https://docs.typo3.org/typo3cms/ContributionWorkflowGuide/Appendix/GeneralTopics/CommitHook.html#post-checkout-hook-for-composer-update">https://docs.typo3.org/typo3cms/ContributionWorkflowGuide/Appendix/GeneralTopics/CommitHook.html#post-checkout-hook-for-composer-update</a></li>
</ul> TYPO3 Core - Bug #69665 (Closed): Rendering of TypoScript shortcutIcon does not consider HTTPS (i...http://forge.typo3.org/issues/696652015-09-11T12:40:28ZSybille Peterssypets@gmx.de
<p>IMHO it should be possible to enter the URL for shortcutIcon as arbitrary URL, specifically in any the following formats:</p>
<ul>
<li>absolute path, starting with /</li>
<li>absolute URL e.g. <a class="external" href="https://www.example.org">https://www.example.org</a></li>
<li>scheme relative : //www.example.org</li>
</ul>
<p>The current rendering is not flexible enough for HTTP/ HTTPS because the rendered and cached page will be dependant on the URL scheme first used. This may result in a URL with HTTP scheme used for favicon (if the page is first fetched via http), which will then be cached and used for HTTPS as well resulting in security warnings (mixed content).</p>
<a name="TYPO3-source-code-45-and-62-more-or-less-the-same"></a>
<h1 >TYPO3 source code (4.5 and 6.2 more or less the same):<a href="#TYPO3-source-code-45-and-62-more-or-less-the-same" class="wiki-anchor">¶</a></h1>
<pre><code class="php syntaxhl" data-language="php"><span class="k">if</span> <span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s1">'TSFE'</span><span class="p">]</span><span class="o">-></span><span class="n">pSetup</span><span class="p">[</span><span class="s1">'shortcutIcon'</span><span class="p">])</span> <span class="p">{</span>
<span class="nv">$favIcon</span> <span class="o">=</span> <span class="nv">$GLOBALS</span><span class="p">[</span><span class="s1">'TSFE'</span><span class="p">]</span><span class="o">-></span><span class="n">tmpl</span><span class="o">-></span><span class="nf">getFileName</span><span class="p">(</span><span class="nv">$GLOBALS</span><span class="p">[</span><span class="s1">'TSFE'</span><span class="p">]</span><span class="o">-></span><span class="n">pSetup</span><span class="p">[</span><span class="s1">'shortcutIcon'</span><span class="p">]);</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">is_file</span><span class="p">(</span><span class="n">PATH_site</span> <span class="mf">.</span> <span class="nv">$favIcon</span><span class="p">))</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">function_exists</span><span class="p">(</span><span class="s1">'finfo_open'</span><span class="p">))</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$finfo</span> <span class="o">=</span> <span class="o">@</span><span class="nb">finfo_open</span><span class="p">(</span><span class="no">FILEINFO_MIME</span><span class="p">))</span> <span class="p">{</span>
<span class="nv">$iconMimeType</span> <span class="o">=</span> <span class="s1">' type="'</span> <span class="mf">.</span> <span class="nb">finfo_file</span><span class="p">(</span><span class="nv">$finfo</span><span class="p">,</span> <span class="p">(</span><span class="n">PATH_site</span> <span class="mf">.</span> <span class="nv">$favIcon</span><span class="p">))</span> <span class="mf">.</span> <span class="s1">'"'</span><span class="p">;</span>
<span class="nb">finfo_close</span><span class="p">(</span><span class="nv">$finfo</span><span class="p">);</span>
<span class="nv">$pageRenderer</span><span class="o">-></span><span class="nf">setIconMimeType</span><span class="p">(</span><span class="nv">$iconMimeType</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nv">$pageRenderer</span><span class="o">-></span><span class="nf">setFavIcon</span><span class="p">(</span><span class="nc">GeneralUtility</span><span class="o">::</span><span class="nf">getIndpEnv</span><span class="p">(</span><span class="s1">'TYPO3_SITE_URL'</span><span class="p">)</span> <span class="mf">.</span> <span class="nv">$favIcon</span><span class="p">);</span>
<span class="p">}</span>
</code></pre>
<p>As you can see, it is not possible to use relative or absolute paths because TYPO3_SITE_URL is prepended in any case. It is not possible to use absolute URLs because this will result in is_file failing.</p>
<p>This issue has actually already been reported, but for typo3.org, see <a class="external" href="https://forge.typo3.org/issues/58265">https://forge.typo3.org/issues/58265</a></p>
<p>Any help is appreciated.</p>