[XenDACH] LimitLanguageUsage

[XenDACH] LimitLanguageUsage 2.0.3

No permission to download

duderuud

Well-known member
Thanks for this add-on!

Receiving errors in the errorlog though:

Code:
ErrorException: [E_NOTICE] Undefined index: xd_user_selectable - src/XF/Language.php:383

Stack trace
       
#0 src/XF/Language.php(383): XF::handlePhpError(8, '[E_NOTICE] Unde...', 's...', 383, Array)
#1 src/XF/Language.php(388): XF\Language->offsetGet('xd_user_selecta...')
#2 src/addons/XenDACH/LimitLanguageUsage/XF/Pub/Controller/Account.php(19): XF\Language->__get('xd_user_selecta...')
#3 src/XF/Pub/Controller/Account.php(311): XenDACH\LimitLanguageUsage\XF\Pub\Controller\Account->preferencesSaveProcess(Object(KL\UserImprovements\Entity\User))
#4 src/XF/Mvc/Dispatcher.php(249): XF\Pub\Controller\Account->actionPreferences(Object(XF\Mvc\ParameterBag))
#5 src/XF/Mvc/Dispatcher.php(88): XF\Mvc\Dispatcher->dispatchClass('XF:Account', 'Preferences', 'json', Object(XF\Mvc\ParameterBag), 'account', Object(KL\UserImprovements\Pub\Controller\Account), NULL)
#6 src/XF/Mvc/Dispatcher.php(41): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#7 src/XF/App.php(1934): XF\Mvc\Dispatcher->run()
#8 src/XF.php(333): XF\App->run()
#9 index.php(13): XF::runApp('XF\\Pub\\App')
#10 {main}
       
Request state
       
array(4) {
["url"] => string(20) "/account/preferences"
["referrer"] => string(46) "https://www.*****.tld/account/preferences"
["_GET"] => array(1) {
["/account/preferences"] => string(0) ""
}
["_POST"] => array(7) {
["user"] => array(4) {
["style_id"] => string(1) "0"
["language_id"] => string(1) "2"
["timezone"] => string(16) "Europe/Amsterdam"
["visible"] => string(1) "1"
}
["option"] => array(5) {
["receive_admin_email"] => string(1) "1"
["email_on_conversation"] => string(1) "1"
["creation_watch_state"] => string(14) "watch_no_email"
["interaction_watch_state"] => string(14) "watch_no_email"
["content_show_signature"] => string(1) "1"
}
["alert"] => array(24) {
["post_quote"] => string(1) "1"
["post_mention"] => string(1) "1"
["post_like"] => string(1) "1"
["xfmg_media_insert"] => string(1) "1"
 

mcatze

Well-known member
Could you delete the error and tell me when its coming back? I will wait for feedback from the twos guys i mentioned above.
 

nocte

Well-known member
This error comes from line 19 in this file:

Code:
PHP:
if (!$language->xd_user_selectable)
I guess this can be fixed if you toggle the "selectable" setting for each language at least one time. The cache seems to not know about the xd_user_selectable property for the language with ID 2 in your installation.

To prevent all users form getting this error we could change this line:
PHP:
$language = $this->app->language($input['user']['language_id']);
to:
PHP:
$language = $this->em()->find('XF:Language', $input['user']['language_id']);
With this change the language entity gets pulled form the database instead of the cache.

Same change on line 13 here:
 

duderuud

Well-known member
I have 2 languages, Dutch (enabled) and English (disabled).
Toggled the default language and enabled/disabled so will check the error log to see if the error returns.

Thanks for debugging the error!
 

nocte

Well-known member
maybe the latest XF caused it?
not directly, but the upgrade itself might trigger it: The cache gets rebuilt, wich seems to happen without our new xd_user_selectable property.

Another issue is that we need to take care of disallowed languages in user settings: If you disable all languages except one, there will be no language dropdown on /account/preferences, but just a hidden field. If a user had previously selected a disallowed language, he has no chance to select a new one.

Fix: If a webmaster disables language with ID X and only allows language with ID Y, he should run this SQL command:
SQL:
UPDATE xf_user SET language_id = Y WHERE  language_id = X;
(run this command for all language IDs you disallow)

I also thought about the XenDACH\LimitLanguageUsage\XF\Entity\User class extension: here we also have the cache call:
PHP:
foreach ($this->app()->container('language.cache') as $language)
I would not query the database here, because this would add 1 database query to every page request. Maybe we should live without this class extension, but then the language chooser would appear as soon as there are at least 2 installed languages (no matter if they are selectable or not). So if you have English and Dutch, but only dutch is selectable, you'd have a language chooser tough (with just 1 choice). :-/
 
Last edited:

developr

Active member
Could you remove the "-" at the beginning of the zipfile and directories? This is annoying when I work in shell because in every command it used as a parameter instead of file or directory.
 
Top