Extension:BetaFeatures

This page is a translated version of the page Extension:BetaFeatures and the translation is 100% complete.
मीडियाविकि एक्सटेंशन मैन्युअल
BetaFeatures
प्रकाशन की स्थिति: स्थिर
कार्यान्वयन मीडिया, हुक , डेटाबेस
विवरण दूसरे एक्सटेंशन अपनी बीटा सुविधाओं को सदस्य वरीयताओं में पंजीकृत कर सकते हैं
लेखक Mark Holmquist (MarkTraceurवार्ता)
नवीनतम संस्करण 0.1 (Continous updates)
संगतता नीति मीडियाविकि के साथ प्रकाशित स्नैपशॉट्स। Master में पीछे की तरफ से संगतता नहीं है।
MediaWiki 1.25+
PHP 5.4+
डेटाबेस बदलता है हाँ
टेबल betafeatures_user_counts
लाइसेंस GNU साधारण सार्वजनिक लाइसेंस 2.0 या अधिक
डाउनलोड करें Template:WikimediaDownload/gerritonly
उदाहरण Special:Preferences#mw-prefsection-betafeatures
Special
  • $wgBetaFeatures
  • $wgBetaFeaturesAllowList
Quarterly downloads 74 (Ranked 72nd)
Public wikis using 1,031 (Ranked 249th)
BetaFeatures एक्सटेंशन को अनुवादित करें अगर यह translatewiki.net पर उपलब्ध है
मुद्दे अधूरे कार्य · बग की रिपोर्ट करें

BetaFeatures की मदद से दूसरे मीडियाविकि एक्सटेंशन्स विकि पर सदस्य वरीयताओं की सूची में बीटा सुविधाएँ पंजीकृत कर सकते हैं। यह सदस्य वरीयताओं की मौजूदा संरचना और कुछ विशेष पृष्ठों का इस्तेमाल करके अपना काम करता है।

स्थापना

  • फ़ाइलों को डाउनलोड करें और अपने extensions/ फ़ोल्डर के BetaFeatures नामक डिरेक्ट्री में डालें।
    Developers and code contributors should install the extension from Git instead, using:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
  • अपने LocalSettings.php फ़ाइल के अंत में निम्न कोड जोड़ें:
    wfLoadExtension( 'BetaFeatures' );
    
  • अपडेट स्क्रिप्ट चलाएँ जो स्वचालित रूप से आवश्यक डेटाबेस टेबल्स का निर्माण करेगा जिसकी इस एक्सटेंशन को आवश्यकता है।
  • आवश्यकतानुसार कॉन्फ़िगर करें।
  •   पूर्ण – अपने विकि पर Special:Version पर जाकर देखें कि एक्सटेंशन को सफलतापूर्वक स्थापित किया गया है कि नहीं।

अपने एक्सटेंशन में नए हुक्स का इस्तेमाल करना

अपनी बीटा सुविधा को समर्थित करने के लिए इस एक्सटेंशन का इस्तेमाल करना आसान है। अपने extension.json फ़ाइल में "GetBetaFeaturePreferences " प्रकार का एक हुक पंजीकृत करें — इसका सिनटैक्स बिलकुल 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!
}

कॉन्फ़िगरेशन

1 कॉन्फ़िगरेशन वेरिएबल की मदद से यह सीमित किया जा सकता है कि किन बीटा सुविधाओं को वरीयताओं में दिखाया जाएगा। डिफ़ॉल्ट से यह खाली होता है, और सभी बीटा सुविधाएँ दिखाई जाती हैं।

अगर इसका इस्तेमाल किया जाता है, किसी बीटा सुविधा को वरीयताओं में दिखने के लिए इसे व्हाइटलिस्ट में सूचीबद्ध होना होगा। यह कॉन्फ़िगरेशन वेरिएबल स्ट्रिंग्स का एक ऐरे स्वीकार करेगा। हर स्ट्रिंग को एक बीटा सुविधा का नाम होना होगा जो 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',
        );
    }
}

निर्भरताओं का प्रबंधन

इसके बाद हम हर सुविधा के लिए निर्भरताओं के प्रबंधन को परिभाषित कर सकते हैं। ऐसा करने के लिए हमें "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 द्वारा एक डेटाबेस टेबल (betafeatures_user_counts) परिभाषित किया गया है, और इसका इस्तेमाल किया जाता है। लेकिन अगर आप इसका लोकल रूप से इस्तेमाल करने की कोशिश करेंगे तो यह आपको कनफ़्यूज़ कर सकता है।

हम इस कार्य कतार की मदद से इस टेबल के लिए अपडेट्स चलाते हैं जब कैश समाप्त हो जाता है (30 मिनट का जीवन-समय)। अगर आपके विकि को हर अनुरोध पर कार्य चलाने के लिए कॉन्फ़िगर किया गया है, यह हर 30 मिनट बाद बहुऽऽऽऽऽत धीमी रफ़्तार से चलेगा, मगर बाकी का काम जल्दी हो जाएगा। अगर आप अपने विकि को cron के ज़रिए कार्य चलाने के लिए कॉन्फ़िगर करते हैं, यह इससे काफ़ी बेहतर काम करेगा।

इन्हें भी देखें