6/07/2008

Howto : utiliser Wikicalc dans Mediawiki

L'extension médiawiki wikicalc permet d'inclure une feuille de calcul wikicalc dans une page du mediawiki, au moyen d'une nouvelle balise.

La feuille de calcul apparaît dans un cadre avec 2 liens :

  • Modifier la feuille de calcul : renvoie directement vers le serveur wikicalc (requiert un login/mdp selon la configuration de wikicalc). Ne pas oublier de publier la page (onglet publish) pour enregistrer la nouvelle feuille de calcul.
  • Actualiser : permet de regénérer le cache de la page (nécessaire après avoir modifié la feuille de calcul sur wikicalc).

Pour intégrer une feuille de calcul dans une page, il faut utiliser la balise . Par exemple :



Pour créer une nouvelle feuille de calcul, rendez-vous à l'adresse suivante : http://wikicalc.wolverinex02.googlepages.com/wikicalccgi.pl


Filtrage selon la couleur

L'attribut important permet de n'afficher que les lignes contenant au moins une cellule de couleur rouge.



Pour plus de flexibilité, l'attribut color= est aussi présent. Cela marche comme l'attribut important sauf qu'on peut choisir la couleur.



Installation de l'extension

Ajouter dans LocalSettings.php :

###Extension wikicalc##

require_once("$IP/extensions/wikicalc.php");


Créer le nouveau fichier ''extensions/wikicalc.php'' :

/**
*
*
*
* SYNOPSIS
*
* <include src="[URL]" [important] [color="[r,v,b]"] />
*
* INSTALL
*
* Placer ce script dans le dossier 'extensions' de mediawiki :
* "$IP/extensions/wikicalc.php"
* o˘ $IP est le chemin d'installation de MediaWiki.
* Ensuite, ajouter cette ligne dans LocalSettings.php:
* require_once("$IP/extensions/wikicalc.php");
*
* DESCRIPTION
*
* Cette extension vous permet d'inclure une feuille de calcul wikicalc dans
* une page mediawiki.
*
* ATTRIBUTES
*
* La balise doit toujours avoir au moins un attribut 'src'.
*
* src="[URL]"
* Vous devez inclure 'src' pour indiquer l'URL de la feuille de calcul html.
*
* important
* Seulement les lignes contenant des cellules rouges seront affichées.
*
* color="[r,v,b]"
* Seulement les lignes contenant des cellules de la couleur indiquée seront
* affichÈes.
* Remarque : color="255,0,0" est équivalent au tag 'important'
*/



$wgExtensionFunctions[] = "wf_wikicalc"; $wgExtensionCredits['other'][] = array (

'name' => 'wikicalc',
'author' => 'Matthieu',
'url' => 'yenapa',
'description' => 'Permet d\'inclure une page html distante crÈÈe par wikicalc.',


)

function wf_wikicalc() {

global $wgParser;
$wgParser->setHook( "wikicalc", "render_wikicalc" );


}


/**

* parse_color
*
* retire les lignes (...) contenant des cellules de la couleur $color
*
* $color est une chaine de caractères de la forme "r,v,b" où r,v,b sont des
* entiers entre 0 et 255.
* Par ex : "255,0,0" pour le rouge
*
*/


function parse_color( $table, $style, $color ) { // on recherche le nom des classes css qui correspondent à la bonne couleur de fond. preg_match_all("/\.(s[\d]+) \{[^\}]*background-color:rgb\(".$color."\)[^\}]*}/s", $style, $css_matches, PREG_SET_ORDER);

$tr = "";

// on utilise "/pattern/s" pour éviter le pb des retours à la ligne. // le "?" permet d'inverser la 'greediness' de la regex. preg_match_all("/.*?<\/tr>/s", $table, $tr_matches, PREG_SET_ORDER); foreach ($tr_matches as $tr_tmp) {

foreach ($css_matches as $css_tmp) {

if ( ereg ('(.*)', $tr_tmp[0])) { $tr .= $tr_tmp[0]; } } }

return preg_replace("/.*&<\/tr>/s", $tr, $table); }


/**

* render_wikicalc
*
* This is called automatically by the MediaWiki parser extension system.
* This does the work of loading a file and returning the text content.
* $argv is an associative array of arguments passed in the tag as
* attributes.
*
* @param mixed $input unused
* @param mixed $argv associative array
* @param mixed $parser unused
* @access public
* @return string
*/
function render_wikicalc ( $input , $argv, &$parser )
{
if ( ! isset($argv['src']))
return "ERROR: tag is missing 'src' attribute.";

$output=file_get_contents($argv['src']);
if ($output === False)
return "ERROR: include could not read the given src URL.";

if (ereg ("()", $output, $table_reg)) {
$table = $table_reg[1];
} else {
echo "erreur ";
}

if (ereg ("()", $output, $style_reg)) {
$style = $style_reg[1];
$style = ereg_replace("body[^\}]*}", "", $style);

} else {
echo "erreur ';
$purge = '[[{{fullurl:{{FULLPAGENAME}}|action=purge}} {{{1|Actualiser}}}]]';

$parsedText = $parser->parse($purge, $parser->mTitle, $parser->mOptions, false, false);
$purge = $parsedText->getText();

return $style2.$style.'
'.$purge.$edit.'
'.$table.'
';
}
?>





Gestion de la concurrence

Les conflits d'édition ne sont pas aussi bien gérés que dans mediawiki.

Si 2 personnes modifient en même temps une feuille de calcul wikicalc, elles peuvent voir les modifications des autres en actualisant la page (en passant de l'onglet edit à publish par exemple).

Par contre, si les 2 personnes modifient en même temps la même cellule, c'est la dernière modification qui est prise en compte (la précédente est écrasée).

6/03/2008

Installation de Wikicalc : le plus beau des tableurs OpenSource

Comme je l'ai indiqué dans mon dernier poste : WikiCalc est un tableur collaboratif fonctionnant sur le principe du wiki. Il est complètement écrit en perl. Pour l'installer, rien de plus simple, il suffit de commencer par installer les outils nécessaires sur sa bonne vieille Debian :
apt-get install apache2 libapache2-mod-perl2
Puis de télécharger les sources : wikicalc-1-0.tar.gz. Ensuite peut commencer l'installation proprement dite :
cd /var/www
tar xvzf wikicalc-1-0.tar.gz
ln -s wikicalc-1-0 wikicalc

Reste encore à rendre Wikicalc accessible depuis votre serveur Web : par rapport à la configurationi par défaut, il suffit d'y ajouter :



NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost

DocumentRoot /var/www/wikicalc/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/wikicalc/>
Options Indexes FollowSymLinks MultiViews ExecCGI
AddHandler cgi-script .cgi .pl
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>



On charge le module perl :
a2enmod perl
/etc/init.d/apache2 restart

Pour finir l'installation, rendez-vous sur http://wikicalc.monsite.com/wikicalccgi.pl et suivez les instructions....

Maintenant à vous de jouer