W4G Rating Bar

De EjnTricks

Hand-icon.png Votre avis

Current user rating: 75/100 (15 votes)

 You need to enable JavaScript to vote


System-Install-icon.png Installation

Ce plugin permet d'afficher une barre de vote sur les pages MediaWiki. Le package, fichier Fichier:W4G Rating Bar 2.1.2.tar.bz2 est téléchargé, depuis http://www.mediawiki.org/wiki/Extension:W4G_Rating_Bar, dans le répertoire des extensions, soit <code>/var/datas/mediawiki/extensions dans le cadre de ce Wiki. Il sera décompresser dans un sous répertoire W4GRatingBar-2.1.2

#sudo bunzip2 W4G\ Rating\ Bar\ 2.1.2.tar.bz2
#sudo mkdir W4GRatingBar-2.1.2
#sudo tar -C /var/datas/mediawiki/extensions/W4GRatingBar-2.1.2 -xvf W4G\ Rating\ Bar\ 2.1.2.tar
#sudo rm W4G\ Rating\ Bar\ 2.1.2.tar

Le propriétaire du répertoire est ensuite modifié pour être celui qui exécute le serveur Web:

#sudo chown -R www-data:www-data /var/datas/mediawiki/extensions/W4GRatingBar-2.1.2

Puis, il faut le rendre disponible, comme indiqué en introduction de la page des plugins, en créant le lien sous /var/lib/mediawiki/extensions.

#sudo ln -s /var/datas/mediawiki/extensions/W4GRatingBar-2.1.2 /var/lib/mediawiki/extensions/W4GRatingBar-2.1.2
#sudo chown -h www-data:www-data /var/lib/mediawiki/extensions/W4GRatingBar-2.1.2

Par défaut, les permissions sur le répertoire ne permettent pas d'y accéder avec un compte autre que le propriétaire. Ses permissions sont donc modifiées:

#sudo chmod 600 /var/datas/mediawiki/extensions/W4GRatingBar-2.1.2/*
#sudo chmod 700 /var/datas/mediawiki/extensions/W4GRatingBar-2.1.2

Le contenu du répertoire /var/lib/mediawiki/extensions/W4GRatingBar-2.1.2 doit être le suivant:

-rw------- 1 www-data www-data  1293 2011-05-30 09:50 changelog.txt
-rw------- 1 www-data www-data  2476 2011-05-21 17:26 credits.txt
-rw------- 1 www-data www-data   665 2011-03-05 14:23 db_creation.sql
-rw------- 1 www-data www-data 10179 2011-03-20 17:10 SpecialW4GRB_body.php
-rw------- 1 www-data www-data  5383 2011-03-06 16:50 SpecialW4GRBMigrate.php
-rw------- 1 www-data www-data   111 2010-07-17 16:53 w4g_rb.alias.php
-rw------- 1 www-data www-data  2810 2011-05-19 15:50 w4g_rb.css
-rw------- 1 www-data www-data  3084 2011-05-19 15:44 w4g_rb.i18n.php
-rw------- 1 www-data www-data  1321 2011-04-01 14:50 w4g_rb.js
-rw------- 1 www-data www-data  7724 2011-03-20 17:19 w4g_rb-page.class.php
-rw------- 1 www-data www-data 28817 2011-05-21 17:49 w4g_rb.php

Les fichiers suivants ne sont pas nécessaires et peuvent être supprimés:

  • changelog.txt
  • credits.txt
  • db_creation.sql

Attention, cette description entraîne une anomalie qui sera décrite dans le paragraphe Bug installation.


Run-icon.png Activation

Icon-database-process.png Modification base de données

Les différents votes sont stockés dans de nouvelles tables de la base de données. La documentation indique les requêtes suivantes:

CREATE TABLE IF NOT EXISTS `wik_w4grb_votes` (
  `uid` int(11) unsigned NOT NULL,
  `pid` int(11) unsigned NOT NULL,
  `vote` tinyint(4) unsigned NOT NULL,
  `ip` varbinary(39) NOT NULL,
  `time` int(11) unsigned NOT NULL,
  PRIMARY KEY  (`uid`,`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=binary;

CREATE TABLE IF NOT EXISTS `wik_w4grb_avg` (
  `pid` int(10) unsigned NOT NULL,
  `avg` float unsigned NOT NULL,
  `n` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=binary;

# update to database to support anonymous voting:
ALTER TABLE  `wik_w4grb_votes` DROP PRIMARY KEY ,
ADD PRIMARY KEY (  `uid` ,  `pid` ,  `ip` );

Attention, ces requêtes doivent être légèrement modifiées pour prendre en compte le préfixe des tables spécifié dans le fichier LocalSettings.php.

# MySQL specific settings
$wgDBprefix         = "ejnwiki_";

Si les requêtes ne sont pas modifiées, le message suivant s'affichera:

Une erreur de syntaxe de la requête dans la base de données est survenue. Ceci peut indiquer un bogue dans le logiciel. La dernière requête traitée par la base de données était :
(Requête SQL cachée)
depuis la fonction « W4GRBPage::loadAVG ». La base de données a renvoyé l’erreur « 1146 : Table 'wikidb.ejnwiki_w4grb_avg' doesn't exist (localhost) ».



Pour la configuration présentée ci dessus, les requêtes sont réécrites ainsi:

CREATE TABLE IF NOT EXISTS `ejnwiki_w4grb_votes` (
  `uid` int(11) unsigned NOT NULL,
  `pid` int(11) unsigned NOT NULL,
  `vote` tinyint(4) unsigned NOT NULL,
  `ip` varbinary(39) NOT NULL,
  `time` int(11) unsigned NOT NULL,
  PRIMARY KEY  (`uid`,`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=binary;

CREATE TABLE IF NOT EXISTS `ejnwiki_w4grb_avg` (
  `pid` int(10) unsigned NOT NULL,
  `avg` float unsigned NOT NULL,
  `n` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=binary;

# update to database to support anonymous voting:
ALTER TABLE  `ejnwiki_w4grb_votes` DROP PRIMARY KEY ,
ADD PRIMARY KEY (  `uid` ,  `pid` ,  `ip` );

L'exécution sur une base MySql donne le résultat suivant:

mysql> CREATE TABLE IF NOT EXISTS `ejnwiki_w4grb_votes` (
    ->   `uid` int(11) unsigned NOT NULL,
    ->   `pid` int(11) unsigned NOT NULL,
    ->   `vote` tinyint(4) unsigned NOT NULL,
    ->   `ip` varbinary(39) NOT NULL,
    ->   `time` int(11) unsigned NOT NULL,
    ->   PRIMARY KEY  (`uid`,`pid`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=binary;
Query OK, 0 rows affected (0.10 sec)

mysql> CREATE TABLE IF NOT EXISTS `ejnwiki_w4grb_avg` (
    ->   `pid` int(10) unsigned NOT NULL,
    ->   `avg` float unsigned NOT NULL,
    ->   `n` int(10) unsigned NOT NULL,
    ->   PRIMARY KEY  (`pid`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=binary;
Query OK, 0 rows affected (0.08 sec)

mysql> ALTER TABLE  `ejnwiki_w4grb_votes` DROP PRIMARY KEY ,
    -> ADD PRIMARY KEY (  `uid` ,  `pid` ,  `ip` );
Query OK, 0 rows affected (0.21 sec)
Records: 0  Duplicates: 0  Warnings: 0

Icon-Configuration-Settings.png Mise à disposition

Le fichier /etc/mediawiki/LocalSettings.php est ensuite modifié afin d'ajouter:

# Extension W4G Rating Bar
require_once("$IP/extensions/W4GRatingBar-2.1.2/w4g_rb.php");
# Enable anonymous vote
$wgW4GRB_Settings['anonymous-voting-enabled'] = true;

Dans cette configuration, le vote anonyme est autorisé et une ligne de commentaire est placée juste avant, afin de bien identifier son utilité.


Bug-icon.png Bug installation

Malheureusement, le plugin n'est pas utilisable en suivant cette procédure. Le message d'erreur You need to enable Javascript to vote est affiché.


La page suivante de la documentation de Mediawiki mentionne la possibilité de modifier le paramètre $wgAllowUserJs. Cependant cela n'a aucun effet. En fait, l'analyse des requêtes HTTP permet d'avoir une indication bien plus précise sur le dysfonctionnement, avec l'outil Firebug par exemple.


Il se trouve que les URLs extensions/W4G%20Rating%20Bar/w4g_rb.js et extensions/W4G%20Rating%20Bar/w4g_rb.css sont chargées. Or le lien est mis en place avec le nom W4GRatingBar-2.1.2.

Il fallait donc déployer le plugin dans un répertoire W4G Rating Bar, et mettre en place le lien dans l'instance avec le même nom.

#sudo bunzip2 W4G\ Rating\ Bar\ 2.1.2.tar.bz2
#sudo mkdir W4G\ Rating\ Bar
#sudo tar -C /var/datas/mediawiki/extensions/W4G\ Rating\ Bar -xvf W4G\ Rating\ Bar\ 2.1.2.tar
#sudo rm W4G\ Rating\ Bar\ 2.1.2.tar
#sudo chown -R www-data:www-data /var/datas/mediawiki/extensions/W4G\ Rating\ Bar
#sudo chmod 600 /var/datas/mediawiki/extensions/W4G\ Rating\ Bar/*
#sudo chmod 700 /var/datas/mediawiki/extensions/W4G\ Rating\ Bar
#sudo ln -s /var/datas/mediawiki/extensions/W4G\ Rating\ Bar /var/lib/mediawiki/extensions/W4G\ Rating\ Bar
#sudo chown chown -h www-data:www-data /var/lib/mediawiki/extensions/W4G\ Rating\ Bar

Et la modification du fichier LocalSettings.php devient:

# Extension W4G Rating Bar
require_once("$IP/extensions/W4G Rating Bar/w4g_rb.php");
# Enable anonymous vote
$wgW4GRB_Settings['anonymous-voting-enabled'] = true;

Le plugin s'affiche alors, après modification de la page pour injecter le code nécessaire.


Bug-icon.png Bugs

Dans le cadre d'une montée de version de php en 5.5, suite installation de Ubuntu 14.04 Développement, le message d'erreur suivant est apparu dans les logs Apache:

[Sun Jan 05 21:23:30.361606 2014] [:error] [pid 24979] [client 82.230.154.123:52478] PHP Strict Standards:
Only variables should be assigned by reference in /var/datas/mediawiki/extensions/W4G Rating Bar/SpecialW4GRB_body.php on line 45, referer: 
http://www.jouvinio.net/wiki/index.php/W4G_Rating_Bar

Il se trouve qu'il y a eu une modification dans l'affectation des variables à partir de la version 5.3, comme expliqué [1]. Afin d'éviter les messages de warning, le fichier SpecialW4GRB_body.php est modifié en ligne 45 dans la fonction execute.

                $this->skin = $wgUser->getSkin(); # that's useful for creating links more easily
                // $this->skin =& $wgUser->getSkin(); # that's useful for creating links more easily

Le patch du fichier: Plugin installé: SpecialW4GRB_patch_php_5.5.tar.gz


Bug-icon.png Bug version 2.1.2 sur Mediawiki 1.23.0

Suite à la mise à jour de mediawiki en 1.23, la page Pages spéciales est devenue inaccessible avec le message suivant dans les logs Apache :

PHP Fatal error:  Call to undefined method W4GRB::includable() in /var/datas/mediawiki/extensions/W4G Rating Bar/SpecialW4GRB_body.php on line 31,
referer: http://www.jouvinio.net/wiki/index.php/Accueil

Le fichier SpecialW4GRB_body.php présente la définition suivante du constructeur.

        function __construct()
        {
                parent::__construct( 'W4GRB');
                $this->includable( false );
        }

La classe W4GRB étend la classe UnlistedSpecialPage, elle même une extension de SpecialPage. Or la fonction includable n'est plus définie. De plus, le constructeur de la classe SpecialPage présente le code suivant.

     public function __construct(
         $name = '', $restriction = '', $listed = true,
         $function = false, $file = '', $includable = false
     ) {
         $this->mName = $name;
         $this->mRestriction = $restriction;
         $this->mListed = $listed;
         $this->mIncludable = $includable;
     }

Il apparaît clairement que la variable mIncludable est initialisée avec la valeur false par défaut. Il suffit donc de reprendre le constructeur de W4GRB pour ne plus faire appel à la fonction supprimée.

        function __construct()
        {
                parent::__construct( 'W4GRB');
                # $this->includable( false );
        }


Viewer icon.png Voir aussi

Documentation officielle: http://www.mediawiki.org/wiki/Extension:W4G_Rating_Bar

Ou: http://www.wiki4games.com/Wiki4Games:W4G_Rating_Bar

Description utilisation: http://www.wiki4games.com/Wiki4Games:W4G_Rating_Bar/syntax


Untar-icon.png Package installé

Plugin installé: W4G Rating Bar 2.1.2.tar.bz2