Extensão: BetaFeatures
Estado de lançamento: estável |
|
|---|---|
| Implementação | Multimédia, Hook, Base de dados |
| Descrição | Permite que as outras extensões registem as suas funcionalidades beta nas preferências do utilizador |
| Autor(es) | Mark Holmquist (MarkTraceurdiscussão) |
| Última versão | 0.1 (Continous updates) |
| Política de compatibilidade | Lançamentos de capturas de ecrã em conjunto com o MediaWiki. Original não é compatível com as versões anteriores. |
| MediaWiki | 1.25+ |
| PHP | 5.4+ |
| Alterações à base de dados | Sim |
| Tabelas | betafeatures_user_counts |
| Licença | GNU - Licença Pública Geral 2.0 ou superior |
| Transferência | |
| Exemplo | Special:Preferences#mw-prefsection-betafeatures |
|
Special |
|
|
|
| Traduza a extensão BetaFeatures se esta estiver disponível em translatewiki.net | |
| Problemas | Tarefas em aberto · Reportar um erro |
A extensão BetaFeatures permite que as outras extensões do MediaWiki registem as funcionalidades beta com a lista de preferências do utilizador na wiki. Esta utiliza a arquitetura de preferências do utilizador existente e algumas páginas especiais para realizar a sua função.
Instalação
- Exporte e coloque o ficheiro, ou ficheiros, num diretório chamado
BetaFeatures, na sua pastaextensions/.
Developers and code contributors should install the extension from Git instead, using:cd extensions/ git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
- Acrescente o seguinte código ao fundo do ficheiro $LocalSettings:
wfLoadExtension( 'BetaFeatures' );
- Execute o script de atualização que irá criar automaticamente as tabelas da base de dados necessárias para esta extensão.
- Configure conforme necessário.
Pronto – Na página especial Special:Version da sua wiki verifique se a extensão foi instalada.
Utilizar os novos hooks na sua extensão
Utilizar esta extensão para suportar a sua funcionalidade beta é fácil. Registe um hook do tipo GetBetaFeaturePreferences no seu ficheiro extension.json - a sintaxe é quase idêntica ao hook , com pequenas alterações para suportar o tipo de preferência que nós precisamos neste caso.
GetPreferences
Em extension.json:
"Hooks": {
"GetBetaFeaturePreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences"
},
Em 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'] = [
// Os dois primeiros são chaves de mensagem
'label-message' => 'myextension-awesome-feature-message',
'desc-message' => 'myextension-awesome-feature-description',
// Os caminhos para as imagens que representa a funcionalidade.
// A imagem é normalmente diferente para os idiomas ltr e rtl.
// As imagens para os idiomas específicos também podem ser especificadas utilizando o código de idioma.
'screenshot' => array(
'ru' => "$extensionAssetsPath/MyExtension/images/screenshot-ru.png",
'ltr' => "$extensionAssetsPath/MyExtension/images/screenshot-ltr.png",
'rtl' => "$extensionAssetsPath/MyExtension/images/screenshot-rtl.png",
),
// Hiperligação para a informação sobre a funcionalidade - utilizar as subpáginas em mw.org, talvez?
'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/MyFeature',
// Hiperligação para a discussão sobre a funcionalidade - as páginas de discussão talvez funcionem
'discussion-link' => 'https://www.mediawiki.org/wiki/Help_talk:Extension:MyExtension/MyFeature',
];
}
}
'label-message', 'desc-message', 'info-link', e 'discussion-link' são necessários. Por favor, certifique-se que os utiliza todos!Then, you can use the convenience function provided by BetaFeatures to check whether the feature is enabled.
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
// Implementar a funcionalidade!
}
}
}
You can also use a normal preference check, but don't check against truthy or falsy values - use the values from the HTMLFeatureField class.
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
// Implementar a funcionalidade!
}
}
}
Because the BetaFeatures class should be present everywhere, you could use the convenience function in any hook, special page, or anything else you wanted. Just be aware of potential performance or caching issues you may introduce with those changes.
If you want to also use your extension without BetaFeatures, you should also check for its existence, e.g.:
if (
!ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
|| \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
// Implementar a funcionalidade!
}
Configuração
A variável de configuração $wgBetaFeaturesWhitelist pode ser utilizada para limitar quais as funcionalidades beta que são mostradas nas preferências.
Esta por predefinição está vazia, e são mostradas todas as funcionalidades beta.
Se for utilizada para que uma funcionalidade beta apareça nas preferências, esta precisa de ser listada na lista branca.
Esta variável de configuração aceita uma série de strings.
Cada string deveria ser o nome de uma funcionalidade beta, conforme especificado na definição da preferência passada para onGetBetaFeaturePreferences().
Por exemplo, no código dado em cima, o nome da funcionalidade beta é myextension-awesome-feature, então você precisaria de adicionar esta string $wgBetaFeaturesWhitelist à matriz na configuração da sua wiki:
$wgBetaFeaturesWhitelist = [
'myextension-awesome-feature'
];
Utilização Avançada
Quer ver algo realmente genial?
Grupos de inscrição automática
Com este exemplo, nós registamos uma preferência que é uma "inscrição automática" - se um utilizador marcar isto e surgirem novas funcionalidades que estejam num grupo específico, o utilizador será automaticamente inscrito nessas funcionalidades.
// MyExtensionHooks.php
class MyExtensionHooks {
static function getPreferences( $user, &$prefs ) {
global $wgExtensionAssetsPath;
$prefs['my-awesome-feature-auto-enroll'] = array(
// Os dois primeiros são chaves de mensagem
'label-message' => 'beta-feature-autoenroll-message',
'desc-message' => 'beta-feature-autoenroll-description',
// Hiperligação para a informação na funcionalidade - utilizar as subpáginas em mw.org, talvez?
'info-link' => 'https://wwww.mediawiki.org/wiki/Special:MyLanguage/MyFeature',
// Hiperligação para a discussão sobre a funcionalidade - as páginas de discussão talvez funcionem
'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature',
// Ativar inscrição automática para este grupo
'auto-enrollment' => 'my-awesome-feature-group',
);
$prefs['my-awesome-feature'] = array(
// Os dois primeiros são chaves de mensagem
'label-message' => 'beta-feature-message',
'desc-message' => 'beta-feature-description',
// Os caminhos para as imagens que representa a funcionalidade.
// A imagem é normalmente diferente para os idiomas ltr e rtl.
// As imagens para os idiomas específicos também podem ser especificadas utilizando o código de idioma.
'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',
);
}
}
Gestão de dependência
Next up, we can actually define dependency management per-feature.
To do this we first register the name of a hook that we want to use for this with the hook GetBetaFeatureDependencyHooks, then we register a hook of that type that checks some dependency, and returns true if it's met or false if not.
// 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;
}
}
You can abuse use this feature to do per-wiki disabling of features, if they're marked as dependent. But that sounds really hacky. You probably shouldn't. I can hear you thinking about it right now, just stop it.
Coisas da base de dados
Existe uma tabela da base de dados (betafeatures_user_counts) definida, e utilizada, por BetaFeatures. Mas pode ficar confuso com esta se tentar utilizá-la localmente.
We use the job queue to run updates for this table, when the cache expires (30 minutes TTL). If your wiki is configured to run jobs on each request, this will make about one request every 30 minutes reeeeeeally slow, but the rest will be relatively fast. If you configure your wiki to run jobs via cron, things will work much better.
Resoluções de problemas
Contagens de utilização
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.
Consultar também
| Este extensão está a ser utilizado em um ou mais projetos da Wikimedia. Isso provavelmente significa que a extensão é estável e funciona bem o suficiente para ser usada por esses sites de alto tráfego. Procure o nome desta extensão nos arquivos de configuração CommonSettings.php e InitialiseSettings.php da Wikimedia para ver onde está instalado. Uma lista completa das extensões instaladas em um determinado wiki pode ser vista na página Special:Version do wiki. |
| This extension is included in the following wiki farms/hosts and/or packages: This is not an authoritative list. Some wiki farms/hosts and/or packages may contain this extension even if they are not listed here. Always check with your wiki farms/hosts or bundle to confirm. |
- Stable extensions/pt
- Media handling extensions/pt
- Hook extensions/pt
- Database extensions/pt
- GPL licensed extensions/pt
- Extensions in Wikimedia version control/pt
- ExtensionTypes extensions/pt
- GetPreferences extensions/pt
- LoadExtensionSchemaUpdates extensions/pt
- MakeGlobalVariablesScript extensions/pt
- PreferencesGetIcon extensions/pt
- SaveUserOptions extensions/pt
- SkinTemplateNavigation::Universal extensions/pt
- UserGetDefaultOptions extensions/pt
- All extensions/pt
- Extensions used on Wikimedia/pt
- Extensions included in Canasta/pt
- Extensions included in Miraheze/pt
- Extensions included in WikiForge/pt
- Beta Features/pt
