Utilisateur:Misdre/InfoTab

De Poképédia
Aller à la navigation Aller à la recherche

Sommairement, ajouter un onglet tout là haut. Bon, tout le blabla licence auteur est dans le code. Pas les commentaires par contre. Et c'est alpha.

InfoTab.php[modifier]

<?php
/* Mostly stolen from CommentPages
 * http://www.mediawiki.org/wiki/Extension:CommentPages
 * Zachary <http://www.mediawiki.org/wiki/User:Zachary>, Misdre <http://www.pokepedia.fr/index.php/Utilisateur:Misdre>
 * Released under the GPL
*/ 

// Check environment
if ( !defined( 'MEDIAWIKI' ) ) {
    die( "This is not a valid entry point.\n" );
}

/* Configuration */

// Credits
$wgExtensionCredits['other'][] = array(
    'path' => __FILE__,
    'name' => 'InformationTab',
    'author' => '[http://www.mediawiki.org/wiki/User:Zachary Zachary], [http://www.pokepedia.fr/index.php/Utilisateur:Misdre Misdre]',
    'description' => 'Adds an "Informations" tab to each article',
    'version'       =>  '0.1a2',
    'descriptionmsg' => 'informations-desc',
    'url' => 'http://www.pokepedia.fr/index.php/Utilisateur:Misdre/InfoTab',
);

// Internationalization
$wgExtensionMessagesFiles['InfoTab'] = dirname(__FILE__) . '/InfoTab.i18n.php';

$wgHooks['SkinTemplateTabs'][]  = 'wfInformationPagesSkinTemplateTabs';

function wfInformationPagesSkinTemplateTabs ( $skin, &$content_actions )
{
    global $wgContLang;

    wfLoadExtensionMessages('InfoTab');
    
    $wgInfoTabNamespaces = array(NS_MAIN, NS_TALK);
    
    $pagename = $skin->mTitle->getText();
    $namespace = $skin->mTitle->getNamespace();
    $class = '';
    $page = '';
    $query = '';
    
    
    if( !$skin->mTitle->isSubpage() && !$skin->mTitle->isTalkPage() && in_array($namespace, $wgInfoTabNamespaces) ) {
        $informations = Title::makeTitleSafe( $namespace, $pagename . '/Informations');
        $newcontent_actions = array();

        if (!$informations->exists()) {
            $class = 'new';
            $query = array( 'action' => 'edit', 'redlink' => 1 );

            if (wfMsg('infotab-preload') != '') {
                $query['preload'] = wfMsg('infotab-preload');
            }

            if (wfMsg('infotab-editintro') != '') {
                $query['editintro'] = wfMsg('infotab-editintro');
            }
        } else {
            $class = '';
        }
        
        $newcontent_actions['informations'] = array(
            'class' => $class,
            'text'  => wfMsg('nstab-informations'),
            'href'  => $informations->getFullURL($query),
        );
        
        $insertAfter = $skin->mTitle->getNamespaceKey();
        if ( isset($content_actions['article']) ) {
            $insertAfter = 'article';
        }
        
        $content_actions = efInformationPagesArrayInsertAfter( $content_actions,
                            $newcontent_actions, $insertAfter );

    } elseif ( ($skin->mTitle->isSubpage() && in_array($namespace, $wgInfoTabNamespaces)) || 
               ($skin->mTitle->isTalkPage() && in_array($namespace, $wgInfoTabNamespaces)) ) {

        $articlename = $skin->mTitle->getBaseText();
        $newcontent_actions = array();
        
        /*if($namespace == NS_TALK) {
            $mainarticle = Title::makeTitleSafe( $skin->mTitle->getSubjectPage()->getNamespace(), $pagename);
        } else {
            $mainarticle = Title::makeTitleSafe( $skin->mTitle->getNamespace(), $articlename);
        }
        $content_actions['article']['href'] = $mainarticle->getFullURL($query);*/

        
        
        if( strcmp($skin->mTitle->getSubpageText(), 'Informations') == 0 ) {
            $class = 'selected ';
        }
        
        if($skin->mTitle->isTalkPage()) {
            $informations = Title::makeTitleSafe( $skin->mTitle->getSubjectPage()->getNamespace(), $articlename . '/Informations');
        } else {
            $informations = Title::makeTitleSafe( $namespace, $articlename . '/Informations');
        }
        
        if (!$informations->exists()) {
            $class .= 'new';
            
            $query = array( 'action' => 'edit', 'redlink' => 1 );

            if (wfMsg('infotab-preload') != '') {
                $query['preload'] = wfMsg('infotab-preload');
            }

            if (wfMsg('infotab-editintro') != '') {
                $query['editintro'] = wfMsg('infotab-editintro');
            }
        } else {
            $class .= '';
        }
        
        $newcontent_actions['informations'] = array(
            'class' => $class,
            'text'  => wfMsg('nstab-informations'),
            'href'  => $informations->getFullURL($query),
        );
        
        $insertAfter = $skin->mTitle->getNamespaceKey();
        if ( isset($content_actions['article']) ) {
            $insertAfter = 'article';
        }
        
        $content_actions = efInformationPagesArrayInsertAfter( $content_actions,
                            $newcontent_actions, $insertAfter );
    }
    
    return true;
}

/**
 * Insert array into another array after the specified *KEY*
 * Stolen from GlobalFunctions.php in MW 1.16
 * @param $array Array: The array.
 * @param $insert Array: The array to insert.
 * @param $after Mixed: The key to insert after
 */
function efInformationPagesArrayInsertAfter( $array, $insert, $after ) {
    // Find the offset of the element to insert after.
    $keys = array_keys($array);
    $offsetByKey = array_flip( $keys );
    
    $offset = $offsetByKey[$after];
    
    // Insert at the specified offset
    $before = array_slice( $array, 0, $offset + 1, true );
    $after = array_slice( $array, $offset + 1, count($array)-$offset, true );
    
    $output = $before + $insert + $after;
    
    return $output;
}

InfoTab.i18n.php[modifier]

<?php
/**
 * Internationalisation file for extension InfoTab.
 */
$messages['en'] = array(
    'informations-desc'  => 'Adds a link to informations about the current page (main namespace only)',
//    'informations-tab'  => 'Informations',
    'infotab-editintro' => '',
    'infotab-preload'   => '',
    'nstab-informations'       => 'Informations',
);

$messages['fr'] = array(
    'informations-desc'  => 'Ajoute un lien blablabla',
//    'informations-tab'  => 'Informations',
    'infotab-editintro' => '',
    'infotab-preload'   => '',
    'nstab-informations'       => 'Informations',
);