XF2.0 [XenDACH] LimitLanguageUsage 2.0.2

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

  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