[XenDACH] LimitLanguageUsage

XF2.0 [XenDACH] LimitLanguageUsage 2.0.40

Keine Rechte zum Download
@nocte Mir ist gestern beim Testen noch aufgefallen, das ich im ACP die Default Sprache sperren kann. Ich bekomme zwar eine Fehlermeldung, aber besser wäre ein deaktivieren des Toogle. Fällt dir da was auf die schnelle ein? So in der Richtung wenn Sprache Default, dann Toogle disable.. :bookworm:
 
Ich bekomme seit der Aktualisierung gelegentlich Fehlermeldungen.

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

Code:
#0 src/XF/Language.php(383): XF::handlePhpError(8, '[E_NOTICE] Unde...', '/home/www/katze...', 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/addons/SV/AlertImprovements/XF/Pub/Controller/Account.php(21): XenDACH\LimitLanguageUsage\XF\Pub\Controller\Account->preferencesSaveProcess(Object(xenMade\LAU\XF\Entity\User))
#4 src/XF/Pub/Controller/Account.php(311): SV\AlertImprovements\XF\Pub\Controller\Account->preferencesSaveProcess(Object(xenMade\LAU\XF\Entity\User))
#5 src/XF/Mvc/Dispatcher.php(249): XF\Pub\Controller\Account->actionPreferences(Object(XF\Mvc\ParameterBag))
#6 src/XF/Mvc/Dispatcher.php(88): XF\Mvc\Dispatcher->dispatchClass('XF:Account', 'Preferences', 'json', Object(XF\Mvc\ParameterBag), 'account', Object(SV\AlertImprovements\XF\Pub\Controller\Account), NULL)
#7 src/XF/Mvc/Dispatcher.php(41): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#8 src/XF/App.php(1931): XF\Mvc\Dispatcher->run()
#9 src/XF.php(329): XF\App->run()
#10 index.php(13): XF::runApp('XF\\Pub\\App')
#11 {main}
 
Was für eine XenForo Version nutzt du dafür?
 
So in der Richtung wenn Sprache Default, dann Toogle disable..
das ist ganz einfach. In der entsprechenden TM mit dem Key "xd_language_list_limitLanguageUsage"

ins Replace Feld folgendes einsetzen:
HTML:
<xf:if is="$defaultLanguageId != $language.language_id">
    <xf:toggle name="xd_user_selectable[{$language.language_id}]"
           selected="$language.xd_user_selectable"
           class="dataList-cell--separated u-hideMedium"
           submit="true"
           tooltip="{{ phrase('enable_disable_x', {'title': $language.title}) }}" />
<xf:else />
    <xf:cell>&nbsp;</xf:cell>
</xf:if>
$0
-> damit wird bei der momentanen Default Language die Option zum Disablen ausgeblendet.

Das ganze ist aber rein kosmetisch und hat einen Haken: Nach einem Toggle wird kein Reload der Seite durchgeführt, d.h. wenn ich die Default Language per Toggle ändere, so stimmt das ausblenden des Disablers nicht mehr. Erst nach einem manuellen Reload passt wieder alles..
 
Nachtrag: Ich würde obige TM nicht nutzen (siehe letzter Absatz). Stattdessen habe ich den Admin-Controller etwas angepasst um alle Fehlangaben abzufangen:
  • Man kann nun auch nicht mehr über das Bearbeiten einer Sprache einer Default-Sprache die Auswahlmöglichkeit nehmen.
  • Man kann auch nicht mehr in der Liste einer Default-Language die Auswahlmöglichkeit nehmen (das war auch noch möglich; verhindert wurde nur der umgekehrte Weg, also eine nicht wählbare Sprache zur Default-Sprache machen).
Hier der Code (ganze Klasse):

PHP:
<?php

namespace XenDACH\LimitLanguageUsage\XF\Admin\Controller;

class Language extends XFCP_Language
{
    protected function languageSaveProcess(\XF\Entity\Language $language)
    {
        $form = parent::languageSaveProcess($language);

        if (!$this->filter('xd_user_selectable', 'bool') && $language->language_id == $this->options()->defaultLanguageId)
        {
            $form->logError(\XF::phrase('xd_it_is_not_possible_to_prevent_users_selecting_the_default_language_limitLanguageUsage'));
        }
        else
        {
            $form->setup(function() use ($language) {
                $language->xd_user_selectable = $this->filter('xd_user_selectable', 'bool');
            });
        }

        return $form;
    }

    public function actionToggle()
    {
        $input = $this->filter([
            'default_language_id' => 'int',
            'xd_user_selectable' => 'array'
        ]);

        $languageDefault = $this->assertLanguageExists($input['default_language_id']);
        if (!$languageDefault->xd_user_selectable) {
            return $this->error(\XF::phrase('xd_it_is_not_possible_to_prevent_users_selecting_the_default_language_limitLanguageUsage'));
        }

        foreach ($input['xd_user_selectable'] as $key => $value)
        {
            $languageSelectable = $this->assertLanguageExists($key);
            if ($languageSelectable->language_id == $languageDefault->language_id && !$value)
                return $this->error(\XF::phrase('xd_it_is_not_possible_to_prevent_users_selecting_the_default_language_limitLanguageUsage'));
        }

        parent::actionToggle();

        /** @var \XF\ControllerPlugin\Toggle $plugin */
        $plugin = $this->plugin('XF:Toggle');
        return $plugin->actionToggle('XF:Language', 'xd_user_selectable');
    }
}
Alles ohne Gewähr :D
 
Ich bekomme seit der Aktualisierung gelegentlich Fehlermeldungen.

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

Code:
#0 src/XF/Language.php(383): XF::handlePhpError(8, '[E_NOTICE] Unde...', '/home/www/katze...', 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/addons/SV/AlertImprovements/XF/Pub/Controller/Account.php(21): XenDACH\LimitLanguageUsage\XF\Pub\Controller\Account->preferencesSaveProcess(Object(xenMade\LAU\XF\Entity\User))
#4 src/XF/Pub/Controller/Account.php(311): SV\AlertImprovements\XF\Pub\Controller\Account->preferencesSaveProcess(Object(xenMade\LAU\XF\Entity\User))
#5 src/XF/Mvc/Dispatcher.php(249): XF\Pub\Controller\Account->actionPreferences(Object(XF\Mvc\ParameterBag))
#6 src/XF/Mvc/Dispatcher.php(88): XF\Mvc\Dispatcher->dispatchClass('XF:Account', 'Preferences', 'json', Object(XF\Mvc\ParameterBag), 'account', Object(SV\AlertImprovements\XF\Pub\Controller\Account), NULL)
#7 src/XF/Mvc/Dispatcher.php(41): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#8 src/XF/App.php(1931): XF\Mvc\Dispatcher->run()
#9 src/XF.php(329): XF\App->run()
#10 index.php(13): XF::runApp('XF\\Pub\\App')
#11 {main}

Ich habe mal alle 3 erwähnten Add-ons installiert und getestet. Ich kann den Fehler nich nachvollziehen.. :smoke:
 
Seit dem Update 2.0.12 bekomme ich in "/account/preferences" die Meldung "invalid style" angezeigt. Die Phrase ist Teil dieses Addons.

Code:
#0 src/XF/Language.php(383): XF::handlePhpError(8, '[E_NOTICE] Unde...', '/home/www/netzk...', 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(xenMade\LAU\XF\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(XenDACH\LimitLanguageUsage\XF\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}

Code:
array(4) {
  ["url"] => string(20) "/account/preferences"
  ["referrer"] => string(45) "https://www.netzkatzen.de/account/preferences"
  ["_GET"] => array(1) {
   ["/account/preferences"] => string(0) ""
  }
  ["_POST"] => array(8) {
   ["user"] => array(3) {
     ["style_id"] => string(1) "0"
     ["language_id"] => string(1) "4"
     ["timezone"] => string(16) "Europe/Amsterdam"
   }
   ["option"] => array(5) {
     ["receive_admin_email"] => string(1) "1"
     ["email_on_conversation"] => string(1) "1"
     ["creation_watch_state"] => string(11) "watch_email"
     ["interaction_watch_state"] => string(11) "watch_email"
     ["content_show_signature"] => string(1) "1"
   }
   ["custom_fields"] => array(1) {
     ["erweitertes_men_neue"] => string(2) "ja"
   }
   ["alert"] => array(29) {
     ["post_insert"] => string(1) "1"
     ["post_mention"] => string(1) "1"
     ["post_like"] => string(1) "1"
     ["xfmg_media_insert"] => string(1) "1"
     ["xfmg_media_mention"] => string(1) "1"
     ["xfmg_media_like"] => string(1) "1"
     ["xfmg_album_share_view"] => string(1) "1"
     ["xfmg_album_share_add"] => string(1) "1"
     ["xfmg_album_mention"] => string(1) "1"
     ["xfmg_album_like"] => string(1) "1"
     ["xfmg_comment_insert"] => string(1) "1"
     ["xfmg_comment_quote"] => string(1) "1"
     ["xfmg_comment_mention"] => string(1) "1"
     ["xfmg_comment_like"] => string(1) "1"
     ["xfmg_rating_insert"] => string(1) "1"
     ["ld_link_insert"] => string(1) "1"
     ["ld_link_comment_insert"] => string(1) "1"
     ["ld_link_comment_mention"] => string(1) "1"
     ["ld_link_comment_like"] => string(1) "1"
     ["ld_link_rating_rate"] => string(1) "1"
     ["profile_post_insert"] => string(1) "1"
     ["profile_post_mention"] => string(1) "1"
     ["profile_post_like"] => string(1) "1"
     ["profile_post_comment_your_profile"] => string(1) "1"
     ["profile_post_comment_your_post"] => string(1) "1"
     ["profile_post_comment_other_commenter"] => string(1) "1"
     ["profile_post_comment_like"] => string(1) "1"
     ["conversation_message_like"] => string(1) "1"
     ["user_following"] => string(1) "1"
   }
   ["_xfToken"] => string(8) "********"
   ["_xfRequestUri"] => string(20) "/account/preferences"
   ["_xfWithData"] => string(1) "1"
   ["_xfResponseType"] => string(4) "json"
  }
}
 
Seit dem Update 2.0.12 bekomme ich in "/account/preferences" die Meldung "invalid style" angezeigt. Die Phrase ist Teil dieses Addons.
"invalid style" ist natürlich ein Blödsinn, dürfte mein Fehler sein. Gemeint ist "invalid language". Du speicherst language_id 4 laut deinem Post. Ist die Sprache mit der ID 4 "selectable"?

Meine Vermutung: Du hast nur 1 selectable Sprache in deinem System, daher wird kein Dropdown für die Sprachwahl angezeigt, sondern ein hidden field genutzt. In diesem hidden field ist eine Sprache eingetragen (ID: 4), die gar nicht mehr zur Verfügung steht, aber für deinen Account gespeichert wurde als sie noch auswählbar war.

Ausweg: per SQL query für alle User die gewünschte Sprache setzen.
 
Ich habe das Problem bei allen meinen Foren, aber erst seit dem Update.

Die language_id ist für alle Nutzer inkl. mir bereits über die DB eingestellt gewesen, da ich vor kurzem erst importiert habe.

Die language_id 4 ist die einzig verfügbare Sprache.

Bildschirmfoto 2018-12-12 um 12.05.25.jpg Bildschirmfoto 2018-12-12 um 12.09.56.jpg Bildschirmfoto 2018-12-12 um 12.05.05.jpg
 
Strange.. ich finde in der Klasse XenDACH\LimitLanguageUsage\XF\Pub\Controller\Account keinen Fehler.

Ein ganz ähnlicher Code funktioniert bei mir lokal tadellos.

Die language_id 4 ist die einzig verfügbare Sprache.
Laut Screenshot wären alle 4 Sprachen verfügbar.
 
Ich habe nun alle Sprachen bis auf language_id 4 deaktiviert und nun funktioniert es ohne Probleme.

In einem anderen Forum habe ich nur eine Sprache aktiviert und wieder deaktiviert. Seitdem funktioniert es.
 
Sorry, bei jedem durchschauen der AddOns stosse ich hier drauf - lese alles durch - aber ich habe bis heute nicht kapiert (trotz Video) was das (zusätzlich?) Teil macht.
Die Sprache auswählen geht doch Standardmässig in XF?

LG: Tammy
 
Du kannst hiermit Sprachen ausblenden, was als Standard nicht möglich ist. Dies ist sinnvoll, wenn allgemeinen Sprachpakete verwendet werden, die auch durch Updates überschrieben werden, und dennoch eine eigene angepasste Sprache verwendet wird. In diesen Fällen macht es Sinn die allgemeine Sprache zu verbergen.

Schaust du
Individuelle Sprachen in XenForo verwenden ...
 
Danke, jetzt hab auch ich das kapiert. Gar nicht mal so blöd. Ist mir bisher auch noch gar nicht aufgefallen!

LG: Tammy
 
Ich vielen Bereichen der nicht für XenForo 2.1 vorgesehen Phrasen hast du solche oder ähnliche Fehler. Warum, so meinst du, habe ich mit den 2.1 Sprachpaketen auf der grünen Wiese begonnen. :)
 
Alles hochgeladen. Addon wird im ACP angezeigt.

Klicke ich auf den blauen Button: Intsallieren

Kommt folgendes:

502 Bad Gateway
nginx

XF 2.15

Auch schon mehrmals neu hochgeladen. Hilft nichts.

addonsxf.png

Jemand eine Idee?
 
Zuletzt bearbeitet:
Zurück
Oben