Extension:BetaFeatures/ru

Category:GPL licensed extensions/ru
Справка по расширениям MediaWiki
BetaFeatures
Статус релиза: стабильноCategory:Stable extensions/ru
Реализация МедиафайлыCategory:Media handling extensions/ru, Хук Category:Hook extensions/ru, База данных Category:Database extensions/ru
Описание Позволяет другим расширениям добавить их бета-возможности в пользовательские настройки
Автор(ы) Mark Holmquist (MarkTraceurобсуждение)
Последняя версия 0.1 (Continous updates)
Политика совместимости Снэпшоты выходят вместе с MediaWiki. Мастер не имеет обратной совместимости.
MediaWiki 1.25+Category:Extensions with manual MediaWiki version
PHP 5.4+
Изменения в БД Да
Таблицы betafeatures_user_counts
Лицензия GNU General Public License 2.0 или позднее
Скачать Template:WikimediaDownload/gerritonlyCategory:Extensions in Wikimedia version control/ru
Пример Special:Preferences#mw-prefsection-betafeatures
Special
  • $wgBetaFeatures
  • $wgBetaFeaturesAllowList
Ежеквартальные загрузки 29 (Ranked 81st)
Использование общедоступными вики 1,031 (Ranked 249th)
Переведите расширение BetaFeatures, если оно доступно на translatewiki.net
Проблемы Открытые задачи · Сообщить об ошибке
Category:All extensions/ru

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

Установка

  • Скачайте и распакуйте файл(ы) в папку с названием BetaFeatures в вашей папке extensions/.
    Вместо этого разработчикам и соавторам кода следует установить расширение из Git, используя:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
  • Добавьте следующий код в конце вашего файла LocalSettings.php :
    wfLoadExtension( 'BetaFeatures' );
    
  • Выполните скрипт обновления, который автоматически создаст необходимые таблицы, используемые расширением.
  • Настройте, как вам требуется.
  • Yes Готово – Перейдите на страницу Special:Version на своей вики, чтобы удостовериться в том, что расширение успешно установлено.

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

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

В extension.json:

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

В 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',
        ];
    }
}
На данный момент обязательны 'label-message', 'desc-message', 'info-link' и 'discussion-link'. Убедитесь, что вы используете все из них!

Затем вы можете использовать функцию, предоставленную 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 должен присутствовать везде, вы можете использовать эту функцию для удобства в любом хуке, служебной странице или где-либо ещё. Но будьте готовы к возможным проблем с производительностью и кэшированием, которые вы можете создать такими изменениями.

Если вы хотите также использовать ваше расширение «без» BetaFeatures, вам также следует проверить его существование, например:

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

Конфигурация

Переменная конфигурации $wgBetaFeaturesWhitelist может использоваться для ограничения бета-функций, отображаемых в настройках. По умолчанию он пуст, и отображаются все бета-функции.

Если он используется, то для того, чтобы бета-функция отображалась в настройках, она должна быть указана в белом списке. Эта переменная конфигурации принимает массив строк. Каждая строка должна быть именем бета-функции, как указано в определении предпочтения, переданном в onGetBetaFeaturePreferences(). Например, в приведенном выше коде название бета-функции — myextension-awesome-feature, поэтому вам нужно будет добавить эту строку в массив $wgBetaFeaturesWhitelist в конфигурации вашей вики:

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

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

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

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

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

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

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

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

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

Базы данных

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

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

Разрешение проблем

Количество использований

Подсчёт количества использований может отображать не точное количество пользователей, у которых активированы некоторые бета-возможности в данный момент. Эти цифры следует воспринимать как приблизительные.

Это число вычисляется заданием, которое может быть отложено или долго выполняться. В прошлом для этих значений также существовал 30-минутный кэш.

Смотрите также

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