XF2.0 [XenDACH] LimitLanguageUsage 2.0.3

Nutzbare Sprachen für Benutzer beschränken

  1. McAtze

    McAtze Innendienst Lizenzinhaber

    @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:
     
  2. developr

    developr Neues Mitglied Lizenzinhaber

    Ich bekomme seit der Aktualisierung gelegentlich Fehlermeldungen.

    Code (Text):
    ErrorException: [E_NOTICE] Undefined index: xd_user_selectable - src/XF/Language.php:383
    Code (Text):
    #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}
     
  3. McAtze

    McAtze Innendienst Lizenzinhaber

    Was für eine XenForo Version nutzt du dafür?
     
  4. nocte

    nocte Mitglied Lizenzinhaber

    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..
     
  5. nocte

    nocte Mitglied Lizenzinhaber

    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
     
    McAtze gefällt das.
  6. McAtze

    McAtze Innendienst Lizenzinhaber

    Ich habe mal alle 3 erwähnten Add-ons installiert und getestet. Ich kann den Fehler nich nachvollziehen.. :smoke:
     
  7. McAtze

    McAtze Innendienst Lizenzinhaber

  8. developr

    developr Neues Mitglied Lizenzinhaber

    Seit dem Update 2.0.12 bekomme ich in "/account/preferences" die Meldung "invalid style" angezeigt. Die Phrase ist Teil dieses Addons.

    Code (Text):

    #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 (Text):

    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"
      }
    }
     
     
  9. nocte

    nocte Mitglied Lizenzinhaber

    "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.
     
  10. developr

    developr Neues Mitglied Lizenzinhaber

    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
     
  11. nocte

    nocte Mitglied Lizenzinhaber

    Strange.. ich finde in der Klasse XenDACH\LimitLanguageUsage\XF\Pub\Controller\Account keinen Fehler.

    Ein ganz ähnlicher Code funktioniert bei mir lokal tadellos.

    Laut Screenshot wären alle 4 Sprachen verfügbar.
     
  12. developr

    developr Neues Mitglied Lizenzinhaber

    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.
     
    McAtze gefällt das.
  13. McAtze

    McAtze Innendienst Lizenzinhaber

    Alluidh gefällt das.
  14. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    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
     
  15. Alluidh

    Alluidh Übersetzer Lizenzinhaber

    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 ...
     
    Tamara-Jasmin gefällt das.
  16. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    Danke, jetzt hab auch ich das kapiert. Gar nicht mal so blöd. Ist mir bisher auch noch gar nicht aufgefallen!

    LG: Tammy
     
  17. hohleweg

    hohleweg Aktives Mitglied Lizenzinhaber

    Hi
    Funktioniert auch in 2.1 !

    (und falls es interessiert in Mouseover ist ein Fehler
    Zwischenablage02.jpg )

    Danke.
    Gruß Jo
     
    McAtze gefällt das.
  18. Alluidh

    Alluidh Übersetzer Lizenzinhaber

    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. :)
     
  19. hohleweg

    hohleweg Aktives Mitglied Lizenzinhaber

    ..war ja nur als klitzekleine Anmerkung gedacht!

    und
    Frische Luft??

    :)

    ne Spass Danke an euch beide.
     
    McAtze gefällt das.
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden