2010-07-12 21 views
2

Nous avons un wiki MediaWiki. J'aimerais pouvoir vous dire combien de collaboration se déroule et j'ai pensé au graphique suivant: nombre d'auteurs par page. Ainsi, les données seraient comme ceci:Comment représenter graphiquement le nombre d'auteurs par page dans MediaWiki?

#Pages #Authors 
20  1 
10  2 
25  3 

etc. Cela montrerait que 20 pages ont seulement 1 auteur, 10 ont 2, 25 ont 3, ...

Est-ce que quelqu'un sait d'une façon de obtenir cette information?

Cette information devrait également être montrée au fil du temps - donc si quelqu'un a des informations sur la façon de faire cela, je serais reconnaissant. (Par exemple, les derniers mois, 25% des pages comptaient 2 auteurs ou plus, ce mois-ci, 30%).

+1

Où est mon deuxième tumbleweed ?! – Wikis

Répondre

2

Ce n'est pas exactement ce que vous vouliez, mais ce pourrait être un bon début. C'est une page spéciale simple dont le seul but est d'afficher les noms de pages et le nombre d'auteurs.

$wgAutoloadClasses['SpecialPagesAuthors'] = $IP . '/additions.php'; 
$wgSpecialPages['PagesAuthors'] = 'SpecialPagesAuthors'; 

class SpecialPagesAuthors extends SpecialPage { 
    function __construct() { 
     parent::__construct('PagesAuthors'); 
    } 

Il s'agit simplement d'enregistrer la page.

function execute($par) { 
     global $wgOut; 

     $dbr = wfGetDB(DB_SLAVE); 

     $output = <<<WIKITEXT 
{| class="wikitable" 
! Page !! Authors 

WIKITEXT; 

Nous mettons tout dans une belle table.

 $query_result = $dbr->select(
      array('revision', 'page'), 
      array('rev_page', 'page_id', 'page_namespace', 'page_title', 
       'COUNT(DISTINCT(rev_user_text)) AS unique_authors'), 
      null, 
      __METHOD__, 
      array('GROUP BY' => 'rev_page', 'ORDER BY' => 'unique_authors DESC'), 
      array('page' => array('LEFT JOIN', 'page_id=rev_page')) 
     ); 

Ici, nous interroger la base de données pour les pages et le nombre d'auteurs (qui est essentiellement le nombre de noms d'utilisateurs uniques et adresses IP qui ont édité la page).

 foreach($query_result as $row) { 
      $title = Title::newFromRow($row); 
      $page_title = $title->getPrefixedText(); 
      $output .= <<<WIKITEXT 
|- 
| {$page_title} || {$row->unique_authors} 

WIKITEXT; 
     } 

     $dbr->freeResult($query_result); 

Ici, nous affichons le nom de la page et le nombre d'auteurs dans la table et libérons le résultat de la requête DB.

 $output .= "|}"; 

     $this->setHeaders(); 
     $wgOut->addWikiText($output); 
    } 
} 
+0

@Matej: J'ai apporté quelques modifications au code et je l'ai mis ici: http://pastebin.com/KYca9JSV Merci beaucoup pour votre aide. BTW aucune idée pourquoi le titre de la page est < pages auteurs >? Sinon, je vais créer une nouvelle question SO. – Wikis

+1

Il indique qu'il cherche le message 'pagesauthors' à utiliser pour le titre de la page. Créez simplement une page appelée 'pagesauthors' dans l'espace de noms MediaWiki avec le titre désiré. Pour plus d'informations, voir la [documentation de localisation] (http://www.mediawiki.org/wiki/Localization). –

+0

@Matej - fantastique, cela a fonctionné! Merci. – Wikis