Расширение:Бета-Функции

From MediaWiki.org
Jump to: navigation, search
This page is a translated version of the page Extension:BetaFeatures and the translation is 100% complete.

Other languages:
العربية • ‎български • ‎català • ‎Deutsch • ‎English • ‎español • ‎suomi • ‎français • ‎עברית • ‎Հայերեն • ‎Bahasa Indonesia • ‎italiano • ‎日本語 • ‎한국어 • ‎polski • ‎português • ‎português do Brasil • ‎русский • ‎sicilianu • ‎سنڌي • ‎中文
Справка по расширениям MediaWikiManual:Extensions
Crystal Clear action run.png
BetaFeatures

Статус релиза:Extension status стабильный

BetaFeatures 2013-09-06.png
РеализацияTemplate:Extension#type Media, Hook, Database
ОписаниеTemplate:Extension#description Позволяет другим расширениям добавить их бета-функции в пользовательские настройки
Автор(ы)Template:Extension#username Mark Holmquist (MarkTraceurtalk)
Последняя версияTemplate:Extension#version 0.1 (Continous updates)
MediaWikiTemplate:Extension#mediawiki 1.25+
PHPTemplate:Extension#php 5.4+
Изменения БДTemplate:Extension#needs-updatephp Да
ЛицензияTemplate:Extension#license GNU General Public License 2.0 or later
Загрузка Template:WikimediaDownload/gerritonly
ПримерTemplate:Extension#example Multimedia Alpha site
Пространство имёнTemplate:Extension#namespace

Special

ПараметрыTemplate:Extension#parameters
  • $wgBetaFeaturesWhitelist
  • $wgBeatFeatures
Использованные hook'иTemplate:Extension#hook
UserSaveOptionsManual:Hooks/UserSaveOptions
GetPreferencesManual:Hooks/GetPreferences
PersonalUrlsManual:Hooks/PersonalUrls
LoadExtensionSchemaUpdatesManual:Hooks/LoadExtensionSchemaUpdates
MakeGlobalVariablesScriptManual:Hooks/MakeGlobalVariablesScript
ExtensionTypesManual:Hooks/ExtensionTypes

Переведите расширение BetaFeatures если оно доступно на translatewiki.net

Проверьте использование и версию.

ПроблемыPhabricator

Открытые задачи · Сообщить об ошибке

Расширение BetaFeatures позволяет другим расширениям MediaWiki регистрировать бета-функции в списке пользовательских настроек на вики. Расширение использует существующую архитектуру пользовательских настроек и несколько служебных страниц для выполнения своей работы.

Установка[edit]

  • Скачайте и распакуйте файл(ы) в папку с именем «BetaFeatures» в папке extensions/ вашего сайта.
  • Добавьте следующий код в файл LocalSettings.php (в самый конец):
    wfLoadExtension( 'BetaFeatures' );
    
  • Выполните скрипт обновления структуры БД, который автоматически создаст необходимые таблицы, используемые расширением.
  • YesY Готово - Перейдите на страницу «Special:Version» на своём сайте, чтобы удостовериться в том, что расширение успешно установлено.

Для использующих MediaWiki 1.24 или более ранние:

В приведенных выше инструкциях описывается новый способ установки этого расширения с использованием wfLoadExtension()

Если вам нужно установить это расширение на более ранние версии (MediaWiki 1.24 и более ранние), вместо wfLoadExtension( 'BetaFeatures' );, Вам необходимо использовать:

require_once "$IP/extensions/BetaFeatures/BetaFeatures.php";

Использование новых приёмов в вашем расширении[edit]

Использование этого расширения для поддержки вашей бета-функции просто. Зарегистрируйте привязку типа "GetBetaFeaturePreferences" в основном файле вашего расширения — синтаксис практически идентичен таковому у привязки GetPreferences, но с небольшими изменениями для поддержки необходимого нам в этом случае типа настройки.

// MyExtension.php
$wgAutoloadClasses['MyExtensionHooks'] = __DIR__ . '/MyExtensionHooks.php';
$wgHooks['GetBetaFeaturePreferences'][] = 'MyExtensionHooks::getPreferences';
На данный момент обязательны 'label-message', 'desc-message', 'info-link' и 'discussion-link'. Убедитесь, что вы используете все из них!
// 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/MyFeature',
            // Link to discussion about the feature - talk pages might work
            'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature',
        );
    }
}

Затем вы можете использовать функцию, предоставленную BetaFeatures для удобства, чтобы проверить, включена ли эта бета-возможность.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

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

Вы также можете использовать обычные проверки на настройки, но не проверяйте на истинные и ложные значения, а используйте значения из класса HTMLFeatureField.

// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {

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

Поскольку класс BetaFeatures должен присутствовать везде, вы можете использовать эту функцию для удобства в любой привязке, служебной странице или чём-либо ещё. Но будьте готовы к возможным проблем с производительностью и кэшированием, которые вы можете создать такими изменениями.

Расширенное использование[edit]

Хотите увидеть кое-что по-настоящему крутое?

Группы автоматического включения[edit]

В этом примере мы зарегистрируем функцию с "автоматическим включением": если участник её включит, и выйдут новые возможности, принадлежащие какой-либо конкретной группе, участник автоматически будет включён в пользователи этих возможностей.

// 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',
        );
    }
}

Управление зависимостями[edit]

Затем мы можем на самом деле определить управление зависимостями для каждой возможности. Чтобы сделать это, мы сначала регистрируем название (name) привязки, которую мы хотим использовать для этого, в привязке "GetBetaFeatureDependencyHooks", затем мы регистрируем привязку этого типа, которая проверяет наличие требуемого кода, и возвращает true, если требование удовлетворено, а иначе возвращает 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;
    }
}

Вы можете злоупотреблять использовать эту возможность, чтобы выполнять отключение возможностей, отмеченных как зависимые, для каждой вики. Но это уже просто запредельное хакерство. Вам, скорее всего, не следует этого делать. Я слышу, как вы об этом подумываете вот прямо сейчас. Прекратите.

Фигня про базы данных[edit]

Определена таблица базы данных (betafeatures_user_counts), которая используется BetaFeatures. Но вы можете оказаться в замешательстве, если попытаетесь использовать её локально.

Мы используем очередь заданий, чтобы выполнять обновление этой таблицы, когда кэш устаревает (TTL 30 минут). Если ваша вики настроена таким образом, что она выполняет задания по каждому запросу, то будет выполнен один ооооооочень медленный запрос каждые 30 минут, а остальное будет относительно быстрым. Если вы настраиваете свою вики, чтобы она выполняла задания через cron, всё будет работать намного лучше.

См. также[edit]