Page MenuHomePhabricator

TypeError: array_map(): Argument #2 ($array) must be of type array, bool given
Closed, ResolvedPublic

Description

[f7491421ae4ebbd93318c540] /w/load.php?lang=en-gb&modules=startup&only=scripts&raw=1&skin=vector TypeError: array_map(): Argument #2 ($array) must be of type array, bool given

Backtrace:

from /var/www/wiki/mediawiki/extensions/DiscussionTools/includes/LanguageData.php(96)
#0 /var/www/wiki/mediawiki/extensions/DiscussionTools/includes/LanguageData.php(96): array_map()
#1 /var/www/wiki/mediawiki/extensions/DiscussionTools/includes/ResourceLoaderData.php(47): MediaWiki\Extension\DiscussionTools\LanguageData->getLocalData()
#2 /var/www/wiki/mediawiki/core/includes/ResourceLoader/FileModule.php(1265): MediaWiki\Extension\DiscussionTools\ResourceLoaderData::getLocalData()
#3 /var/www/wiki/mediawiki/core/includes/ResourceLoader/FileModule.php(608): MediaWiki\ResourceLoader\FileModule->expandPackageFiles()
#4 /var/www/wiki/mediawiki/core/includes/ResourceLoader/Module.php(928): MediaWiki\ResourceLoader\FileModule->getDefinitionSummary()
#5 /var/www/wiki/mediawiki/core/includes/ResourceLoader/StartUpModule.php(224): MediaWiki\ResourceLoader\Module->getVersionHash()
#6 /var/www/wiki/mediawiki/core/includes/ResourceLoader/StartUpModule.php(425): MediaWiki\ResourceLoader\StartUpModule->getModuleRegistrations()
#7 /var/www/wiki/mediawiki/core/includes/ResourceLoader/Module.php(817): MediaWiki\ResourceLoader\StartUpModule->getScript()
#8 /var/www/wiki/mediawiki/core/includes/ResourceLoader/Module.php(786): MediaWiki\ResourceLoader\Module->buildContent()
#9 /var/www/wiki/mediawiki/core/includes/ResourceLoader/Module.php(925): MediaWiki\ResourceLoader\Module->getModuleContent()
#10 /var/www/wiki/mediawiki/core/includes/ResourceLoader/ResourceLoader.php(703): MediaWiki\ResourceLoader\Module->getVersionHash()
#11 [internal function]: MediaWiki\ResourceLoader\ResourceLoader->MediaWiki\ResourceLoader\{closure}()
#12 /var/www/wiki/mediawiki/core/includes/ResourceLoader/ResourceLoader.php(701): array_map()
#13 /var/www/wiki/mediawiki/core/includes/ResourceLoader/ResourceLoader.php(804): MediaWiki\ResourceLoader\ResourceLoader->getCombinedVersion()
#14 /var/www/wiki/mediawiki/core/load.php(53): MediaWiki\ResourceLoader\ResourceLoader->respond()
#15 /var/www/wiki/mediawiki/core/load.php(39): wfLoadMain()
#16 {main}

Event Timeline

This means that ( new DateTimeZone( $localTimezone ) )->getTransitions() ) is returning false indicating a failure. "DateTimeZone objects wrapping type 1 (UTC offsets) and type 2 (abbreviations) do not contain any transistions, and calling this method on them will return false." -- so presumably we have some server where $localTimezone is something like CST rather than America/Chicago (or whatever).

@matmarex since this is just trying to generate those abbreviations anyway is it going to break anything horribly if we do a fallback so that we just use the abbreviation given here?

According to the docs at https://www.mediawiki.org/wiki/Manual:$wgLocaltimezone CST should be a valid value (or at least, we're using those as examples)...

@Reedy oh, it's totally valid -- this code is just not handling the case at all well, since the abbreviation inherently doesn't have a transition.

Arguable whether it's valid… You won't find it on https://www.php.net/manual/en/timezones.php, and also https://www.php.net/manual/en/timezones.others.php (which lists some other abbreviations) warns very strongly against using them.

Regardless, I think we can indeed just use the abbreviation as a fallback.

Change 811798 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/extensions/DiscussionTools@master] LanguageData: Accept abbreviations in $wgLocaltimezone

https://gerrit.wikimedia.org/r/811798

Change 811798 merged by jenkins-bot:

[mediawiki/extensions/DiscussionTools@master] LanguageData: Accept abbreviations in $wgLocaltimezone

https://gerrit.wikimedia.org/r/811798