Extension:BetaFeatures/pt-br

Category:GPL licensed extensions/pt-br
Manual de extensões do MediaWiki
BetaFeatures
Estado da versão: estávelCategory:Stable extensions/pt-br
Implementação MídiaCategory:Media handling extensions/pt-br, Hook Category:Hook extensions/pt-br, Banco de dados Category:Database extensions/pt-br
Descrição Permite que outras extensões registrem seus recursos beta nas preferências do usuário
Autor(es) Mark Holmquist (MarkTraceurdiscussão)
Última versão 0.1 (Continous updates)
Política de
compatibilidade
Lançamentos de snapshot junto com o MediaWiki. A master não é retrocompatível.
MediaWiki 1.25+Category:Extensions with manual MediaWiki version/pt-br
PHP 5.4+
Modifica o banco
de dados
Sim
Tabelas betafeatures_user_counts
Licença GNU GPL (Licença Pública Geral) 2.0 ou superior
Download Template:WikimediaDownload/gerritonlyCategory:Extensions in Wikimedia version control/pt-br
Exemplo Special:Preferences#mw-prefsection-betafeatures
Special
  • $wgBetaFeatures
  • $wgBetaFeaturesAllowList
Para traduzir a extensão BetaFeatures, verifique sua disponibilidade no translatewiki.net
Problemas Tarefas em aberto · Relatar um bug
Category:All extensions/pt-br

A extensão BetaFeatures permite que outras extensões do MediaWiki registrem seus recursos beta na lista de preferências do usuário na wiki. Ela utiliza da arquitetura já existente das preferências de usuário e de algumas poucas páginas especiais para cumprir seu propósito.

Instalação

  • Baixe e mova a pasta extraída BetaFeatures ao seu diretório extensions/.
    Desenvolvedores e colaboradores de código, por outro lado, deverão instalar a extensão a partir do Git, usando:
    cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
    
  • Adicione o seguinte código ao final do seu arquivo LocalSettings.php :
    wfLoadExtension( 'BetaFeatures' );
    
  • Execute o script de atualização que criará automaticamente as tabelas necessárias a essa extensão no banco de dados.
  • Configure conforme o necessário.
  • Yes Concluído – Navegue à página Special:Version em sua wiki para verificar se a instalação da extensão foi bem sucedida.

Usando os novos hooks em sua extensão

Usando essa extensão para dar suporte ao seu recurso beta é fácil. Registre um hook do tipo “GetBetaFeaturePreferences” no seu arquivo extension.json — a sintaxe é quase idêntica ao hook GetPreferences, com algumas pequenas mudanças para ser compatível com o tipo de preferência necessário neste caso.

Na extension.json:

    "Hooks": {
        "GetBetaFeaturePreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences"
    },

Na MyExtension/includes/Hooks.php:

namespace MediaWiki\Extension\MyExtension;
class Hooks {
    public static function onGetBetaFeaturePreferences( User $user, array &$betaPrefs ) {
        $extensionAssetsPath = MediaWikiServices::getInstance()
			->getMainConfig()
			->get( 'ExtensionAssetsPath' );
        $betaPrefs['myextension-awesome-feature'] = [
            // The first two are message keys
            'label-message' => 'myextension-awesome-feature-message',
            'desc-message' => 'myextension-awesome-feature-description',
            // Paths to images that represents the feature.
            // The image is usually different for ltr and rtl languages.
            // Images for specific languages can also specified using the language code.
            'screenshot' => array(
                'ru' => "$extensionAssetsPath/MyExtension/images/screenshot-ru.png",
                'ltr' => "$extensionAssetsPath/MyExtension/images/screenshot-ltr.png",
                'rtl' => "$extensionAssetsPath/MyExtension/images/screenshot-rtl.png",
            ),
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/MyFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help_talk:Extension:MyExtension/MyFeature',
        ];
    }
}
Por enquanto, label-message, desc-message, info-link e discussion-link são requeridos. Certifique-se de usar todos eles!

Daí, é possível utilizar a função de conveniência fornecida pela BetaFeatures para conferir se o recurso foi ativado.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

    public function execute() {
        if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
            // Implement the feature!
        }
    }
}

Também é possível utilizar um normal check nas preferências, mas não o faça contra valores booleanos (True/False) — utilize os valores da classe HTMLFeatureField.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

    public function execute() {
        if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
            // Implement the feature!
        }
    }
}

Pelo fato da classe BetaFeatures necessitar estar presente em todos os lugares, é possível utilizar a função de conveniência em qualquer hook, página especial, etc. Apenas tenha em mente os possível problemas de performance ou de cache que poderão vir com essas mudanças.

Caso você também deseje utilizar sua extensão sem a BetaFeatures, certifique-se que ela não existe:

if (
    !ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
    || \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
    // Implement the feature!
}

Configuração

A variável de configuração $wgBetaFeaturesWhitelist pode ser utilizada para limitar quais recursos betas são exibidos nas preferências. Por padrão, a variável é nula, e todos os recursos beta são exibidos.

Se ela for utilizada, para que um recurso beta seja exibido nas preferências, ele necessitará ser listado na whitelist. Essa variável aceita um arranjo de strings. Cada string deve ser o nome do recurso beta conforme especificado na definição passada ao onGetBetaFeaturePreferences(). Por exemplo, no código acima, o nome do recurso beta é myextension-awesome-feature, então ele deveria ser adicionado ao arranjo $wgBetaFeaturesWhitelist na configuração da sua wiki:

$wgBetaFeaturesWhitelist = [
        'myextension-awesome-feature' 
];

Uso avançado

Quer ver algo bem legal?

Inscrição automática em grupos

Neste exemplo, registramos uma preferência de “auto-inscrição” — se o usuário ativá-la e novos recursos serem lançados para um certo grupo, o usuário será automaticamente “inscrito” a esses recursos (ou seja, serão ativados).

// MyExtensionHooks.php
class MyExtensionHooks {

    static function getPreferences( $user, &$prefs ) {
        global $wgExtensionAssetsPath;

        $prefs['my-awesome-feature-auto-enroll'] = array(
            // The first two are message keys
            'label-message' => 'beta-feature-autoenroll-message',
            'desc-message' => 'beta-feature-autoenroll-description',
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://wwww.mediawiki.org/wiki/Special:MyLanguage/MyFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature',
            // Enable auto-enroll for this group
            'auto-enrollment' => 'my-awesome-feature-group',
        );

        $prefs['my-awesome-feature'] = array(
            // The first two are message keys
            'label-message' => 'beta-feature-message',
            'desc-message' => 'beta-feature-description',
            // Paths to images that represents the feature.
            // The image is usually different for ltr and rtl languages.
            // Images for specific languages can also specified using the language code.
            'screenshot' => array(
                'ru' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ru.png",
                'ltr' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ltr.png",
                'rtl' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-rtl.png",
            ),
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/SomeFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Extension_talk:MyExtension/SomeFeature',
            // Add feature to this group
            'group' => 'my-awesome-feature-group',
        );
    }
}

Gerenciamento de dependências

A seguir, definiremos um recurso de gerenciamento de dependências. Para fazer isso, primeiro registramos o nome do hook o qual desejamos utilizar para isso com o hookGetBetaFeatureDependencyHooks”, e aí registramos um hook daquele tipo que confira dependências, retornando true ou false.

// MyExtension.php
$wgAutoloadClasses['MyExtensionHooks'] = __DIR__ . '/MyExtensionHooks.php';
Hooks::register( 'GetBetaFeaturePreferences', 'MyExtensionHooks::getPreferences' );
Hooks::register( 'GetBetaFeatureDependencyHooks', 'MyExtensionHooks::getDependencyCallbacks' );
Hooks::register( 'CheckDependenciesForMyExtensionFeature', 'MyExtensionHooks::checkDependencies' );
// MyExtensionHooks.php
class MyExtensionHooks {

    static function getPreferences( $user, &$prefs ) {
        global $wgExtensionAssetsPath;

        $prefs['my-awesome-feature'] = array(
            // The first two are message keys
            'label-message' => 'beta-feature-message',
            'desc-message' => 'beta-feature-description',
            // Paths to images that represents the feature.
            // The image is usually different for ltr and rtl languages.
            // Images for specific languages can also specified using the language code.
            'screenshot' => array(
                'ru' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ru.png",
                'ltr' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ltr.png",
                'rtl' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-rtl.png",
            ),
            // Link to information on the feature - use subpages on mw.org, maybe?
            'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/SomeFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Extension_talk:MyExtension/SomeFeature',
            // Mark as dependent on something
            'dependent' => true,
        );
    }

    static function getDependencyCallbacks( &$depHooks ) {
        $depHooks['my-awesome-feature'] = 'CheckDependenciesForMyExtensionFeature';
        return true;
    }

    static function checkDependencies() {
        $dependenciesMet = false;
        // Do some fancy checking and return the result
        return $dependenciesMet;
    }
}

É possível usar e abusar disso para desabilitar os recursos na wiki, caso estejam marcados como dependências. Mas isso parece bem rudimentar, não? Pare, sabemos que você quer fazer isso!

Banco de dados

Há uma tabela de dados definida e usada pela BetaFeatures, que é a betafeatures_user_counts. Entretanto, você poderá ser confundir se tentar utilizá-la localmente.

Usamos a fila de trabalhos (job queue) para executar atualizações nessa tabela após o cache expirar (TTL de 30 minutos). Se sua wiki estiver configurada para executar trabalhos a cada request, isso fará com que uma request a cada 30 minutos seja muuuuuito lenta, mas o resto será relativamente rápido. Se você configurar sua wiki para executar trabalhos através do cron, as coisas serão muito mais rápidas.

Troubleshootings

Usage counts

The usage counts might not reflect exactly the number of users having some beta features activated at this precise moment. These should be interpreted as approximate numbers.

This number is computed by a job, which could be delayed or long-running. In the past, there was also a 30-minutes cache on these figures.

Ver também

Category:Extensions used on Wikimedia/pt-br#BetaFeatures/pt-br Category:Beta Features/pt-br
Category:All extensions/pt-br Category:Beta Features/pt-br Category:Database extensions/pt-br Category:ExtensionTypes extensions/pt-br Category:Extensions in Wikimedia version control/pt-br Category:Extensions included in Canasta/pt-br Category:Extensions included in Miraheze/pt-br Category:Extensions included in WikiForge/pt-br Category:Extensions used on Wikimedia/pt-br Category:Extensions with manual MediaWiki version/pt-br Category:GPL licensed extensions/pt-br Category:GetPreferences extensions/pt-br Category:Hook extensions/pt-br Category:LoadExtensionSchemaUpdates extensions/pt-br Category:MakeGlobalVariablesScript extensions/pt-br Category:Media handling extensions/pt-br Category:PreferencesGetIcon extensions/pt-br Category:SaveUserOptions extensions/pt-br Category:SkinTemplateNavigation::Universal extensions/pt-br Category:Stable extensions/pt-br Category:UserGetDefaultOptions extensions/pt-br