Modifications apportées au Wikini 0.4.3 vers le WikiniMST
Fonction attacher
- Notes du développeurs (http://www.wikini.net/wakka.php?wiki=ActionAttach)
- Modifié le fichier attach.class.php, ligne 237 pour franciser la commande.
- Renommer le fichier attach.php par attacher.php
- On doit avoir une config "upload_permission" => "oui", pour pouvoir utiliser la fonction. Ajouté dans /setup/writeconfig.php pour automatiser à l'installation.
Ajouts formatages
Tableaux
Notification mail
- On doit avoir une config notifier_mail dans le fichier wakka.config.php
- On ajoute dans le fichier /setup/writeconfig.php la config pour une installation automatique.
- Fichier /handlers/page/edit.php -> On y ajoute à la ligne 57
//send e-mail notifications====================================
if ($this->config[notifier_mail]=="oui")
{
if ($_POST["notifyWrite"] == "true") {
$writeACL = $this->LoadAcl($this->GetPageTag(), "write");
$allUsers = explode("\n", $writeACL["list"]);
foreach ($allUsers as $userName) {
$user = $this->LoadUser($userName);
$mailTo = $user["email"];
$mailSubject = "Avis de modification de la page ".$this->GetPageTag();
$mailHeaders = "From: wikini@recitmst.qc.ca\r\n".
"X-Mailer: PHP/" . phpversion();
$mailMessage = "La page ".$this->GetPageTag()." a été modifiée\n".
"\nPour voir les modifications suivez ce lien: ".
$this->href("", "", "")."\n".
"\nSi vous ne désirez plus recevoir de notification, veuillez en avertir le propriétaire de la page ".$this->GetPageTag().".";
mail($mailTo, $mailSubject, $mailMessage, $mailHeaders);
}
}
}//fin send e-mail notifications==============================
et aussi à la ligne 112
//Vérifie si on peut envoyer un avis de modification et met le formulaire dasn une variable pour l'afficher plus bas.
if ($this->config[notifier_mail]=="oui")
{
$notifier_mail="<input type=\"checkbox\" name=\"notifyWrite\" value=\"true\">Envoyer un avis de modification\n";
}
puis "$notifier_mail". //pour le mail à la ligne 130 et 156
Les boutons de mise en page
- edit.php -> ajout de ceci à la ligne 148
$this->FormOpen("edit","","post","wikini").
"<center><a title=\"Gras\" href='#' onclick='insertTags(\"**\",\"**\",\"\")'><img alt=\"Gras\" src=\"images/gras.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Italique\" href='#' onclick='insertTags(\"//\",\"//\",\"\")'><img alt=\"Italique\" src=\"images/italique.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Rouge\" href='#' onclick='insertTags(\"#R#\",\"#R#\",\"Rouge\")'><img alt=\"Rouge\" src=\"images/rouge.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Bleu\" href='#' onclick='insertTags(\"#B#\",\"#B#\",\"\")'><img alt=\"Bleu\" src=\"images/bleu.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Surbrillance\" href='#' onclick='insertTags(\"~~\",\"~~\",\"\")'><img alt=\"Surbrillance\" src=\"images/surbrillance.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Encadrer\" href='#' onclick='insertTags(\":::\",\":::\",\"\")'><img alt=\"Encadrer\" src=\"images/cadre.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Lien\" href='#' onclick='insertTags(\"[[\",\"]]\",\"\")'><img alt=\"Lien\" src=\"images/lien.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Centrer\" href='#' onclick='insertTags(\"#C#\",\"#C#\",\"\")'><img alt=\"Centrer\" src=\"images/centre.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Souliger\" href='#' onclick='insertTags(\"__\",\"__\",\"\")'><img alt=\"Souligner\" src=\"images/souligne.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Liste\" href='#' onclick='insertTags(\" -\",\"\",\"\")'><img alt=\"Liste\" src=\"images/puce.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Liste #\" href='#' onclick='insertTags(\" 1)\",\"\",\"\")'><img alt=\"Liste #\" src=\"images/numero.png\" style=\"border: 0px solid ;\"></a>
<a title=\"Ligne\" href='#' onclick='insertTags(\"----\",\"\",\"\")'><img alt=\"Ligne\" src=\"images/ligne.png\" style=\"border: 0px solid ;\"></a> </center><p>".
- Fichier wakka.php ligne 366 modifier la fonction FormOpen par
function FormOpen($method = "", $tag = "", $formMethod = "post", $formname= "")
{
$result = "<form name=\"".$formname."\" action=\"".$this->href($method, $tag)."\" method=\"".$formMethod."\">\n";
if (!$this->config["rewrite_mode"]) $result .= "<input type=\"hidden\" name=\"wiki\" value=\"".$this->MiniHref($method, $tag)."\" />\n";
return $result;
}
- Ajout de ceci dans /actions/header.php
<script type="text/javascript">
function fKeyDown() { if (event.keyCode == 9) {
event.returnValue= false;
document.selection.createRange().text = String.fromCharCode(9) } }
function escapeQuotes(text) {
text=text.replace(/'/g,"\\'");
text=text.replace(/\n/g,"\\n");
return text;
}
// apply tagOpen/tagClose to selection in textarea,
// use sampleText instead of selection if there is none
// copied and adapted from phpBB
function insertTags(tagOpen, tagClose, sampleText) {
var txtarea = document.wikini.body;
// IE
if(document.selection) {
var theSelection = document.selection.createRange().text;
if(!theSelection) { theSelection=sampleText;}
txtarea.focus();
if(theSelection.charAt(theSelection.length - 1) == " "){// exclude ending space char, if any
theSelection = theSelection.substring(0, theSelection.length - 1);
document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
} else {
document.selection.createRange().text = tagOpen + theSelection + tagClose;
}
// Mozilla
} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
var myText = (txtarea.value).substring(startPos, endPos);
if(!myText) { myText=sampleText;}
if(myText.charAt(myText.length - 1) == " "){ // exclude ending space char, if any
subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
} else {
subst = tagOpen + myText + tagClose;
}
txtarea.value = txtarea.value.substring(0, startPos) + subst + txtarea.value.substring(endPos, txtarea.value.length);
txtarea.focus();
var cPos=startPos+(tagOpen.length+myText.length+tagClose.length);
txtarea.selectionStart=cPos;
txtarea.selectionEnd=cPos;
// All others
} else {
// Append at the end: Some people find that annoying
//txtarea.value += tagOpen + sampleText + tagClose;
//txtarea.focus();
tagOpen=tagOpen.replace(/\n/g,"");
tagClose=tagClose.replace(/\n/g,"");
document.infoform.infobox.value=tagOpen+sampleText+tagClose;
txtarea.focus();
}
// reposition cursor if possible
if (txtarea.createTextRange) txtarea.caretPos = document.selection.createRange().duplicate();
}
</script>
- Ajout des images pour les boutons /images
Gestion des groupes
- http://www.wikini.net/wakka.php?wiki=ACLGroup
- Ajout des fichiers /actions/editgroup.php et /actions/listgroups.php
- Modifier le fichier /setup/install.php pour la création de la table wikini_groups
- Ajout de ceci à la ligne 73 fichier /handlers/page/acls.php
<i>Pour chaque droit d'accès, les règles sont lues de bas en
haut, à raison de <b>exactement une seule règle par ligne</b>. En l'absence
de règle, l'accès est refusé à tout le monde. Syntaxe :
<ul>
<li><tt>NomUtilisateur</tt> : Droit d'accès
(lecture/écriture/commentaires) accordé à
<tt>NomUtilisteur</tt></li>
<li><tt>@legroupe</tt> : Droit d'accès accordé au groupe
<tt>legroupe</tt></li>
<li><tt>*</tt> : Droit d'accès accordé à tout le monde</li>
<li><tt>+</tt> : Droit d'accès accordé uniquement aux personnes
identifiées</li>
<li><tt>!NomUtilisateur</tt> : Droit d'accès refusé à
<tt>NomUtilisteur</tt></li>
<li><tt>!@legroupe</tt> : Droit d'accès refusé au groupe
<tt>legroupe</tt></li>
<li><tt>!*</tt> : Droit d'accès refusé à tout le monde</li>
<li><tt>!+</tt> : Droit d'accès refusé aux personnes
identifiées</li>
</ul>
</i>
Ajout de ceci à la ligne 643 du fichier wakka.php
// a group entry
case "@":
{
if (! preg_match("/^[@](.*)$/",
$line, $matches))
break;
$line = $matches[1];
if (!$this->UserInGroup($line))
{
return $negate;
}
else
{
return !$negate;
}
}
- Ajout de ceci à la ligne 560 de wakka.php
// Return the associative array, key=group name, value=list of
// logins in group
function LoadGroup($grname = "")
{
if ($grname)
$query = "select * from ".$this->config["table_prefix"]."groups where grname = '".$grname."'order by grname asc, grmember asc";
else
$query = "select * from ".$this->config["table_prefix"]."groups order by grname asc, grmember asc";
$r = $this->Query($query);
if (! $r)
return 0;
// Group by lines
$grps = array();
while (list ($grname, $grmb) = mysql_fetch_row($r))
$grps[$grname] .= $grmb."\n";
mysql_free_result($r);
return $grps;
}
// Save the list of users in the group
function SaveGroup($grname, $userslist)
{
$grname = trim($grname);
$lst = explode("\n", $userslist);
$this->Query("delete from ".$this->config["table_prefix"]."groups where grname='".$grname."'", $this->dblink);
foreach ($lst as $login)
{
$login = trim($login);
if (! $login)
continue;
mysql_query("insert into ".$this->config["table_prefix"]."groups set grname = '".mysql_escape_string($grname)."', grmember = '".mysql_escape_string($login)."'", $this->dblink);
}
}
// return true if user is in the given group
function UserInGroup($group, $user = "")
{
if (!$user)
$user = $this->GetUserName();
return $this->LoadSingle("select grname from ".$this->config["table_prefix"]."groups where grname = '".mysql_escape_string($group)."' and grmember =
'".mysql_escape_string($user)."'");
}
Calendrier
- Page du développeur
- Ajout des fichiers /action/calendrier.php et du dossier /calendrier.
- Ajout de la config url_site dans wakka.config.php
Passage de 0.4.1 à 0.4.2
Bogue javascript
- La page
ParametresUtilisateur provoque des erreurs javascript dès qu'on tape une lettre dans les champs textbox (avec Internet Explorer).
Solution :
dans header.php remplacer
<script type="text/javascript" src="ACeditor.js"></script>
par
<?php if ($this->GetMethod() == "edit") {
echo "<script type=\"text/javascript\" src=\"ACeditor.js\"></script>";
}
?> BouiaW, 21 nov. 2004 #R#
Désactivation des commentaires.
Ajout d'une condition au fichier /handlers/page/show.php ->if ($this->config[comments_disable]=="0")
Ajout de la variable dans le fichier wakka.config.php et dans writeconfig.php (lors de l'installation).
Action nbrpages
Correcteur orthographique
//Ajout ou non du bouton pour la correction--PL
if ($this->config[correction_disable]=="0")
{
$correction="<input name=\"submit\" type=\"submit\" value=\"Correction\" />\n";
}
elseif ($_POST["submit"] == "Correction")
{
echo "<div class=\"prev_alert\"><strong>À corriger</strong></div>";
$pl=$this->Format($body);
require_once("correction.php");
$output .=
$this->FormOpen("edit").
"<input type=\"hidden\" name=\"previous\" value=\"".$previous."\" />\n".
"<input type=\"hidden\" name=\"body\" value=\"".htmlentities($body)."\" />\n".
"<br />\n".
"<input name=\"submit\" type=\"submit\" value=\"Enregistrer\" accesskey=\"s\" />\n".
"<input name=\"submit\" type=\"submit\" value=\"Rééditer \" accesskey=\"p\" />\n".
"<input type=\"button\" value=\"Annulation\" onclick=\"document.location='".$this->href("")."';\" />\n".
"$notifier_mail". //pour le mail
$this->FormClose()."\n";
}
Retrait de la fonction referrers
wakka.php: effacer les fonctions faisant références au referrers (
LogReferrer?,
LoadReferrers?,
PurgeReferrers?), effacer $this->PurgeReferrers(); et $this->LogReferrer();.
Supprimer les fichiers referrers.php et referrers_sites.php du répertoire /handlers/page/
Dans /setup/install.php, on retire la création de la table referrers.
Imprimer une page
Ajout du fichier /handlers/page/imprime.php
Ajout d'un fichier wakka.imprime.css
Modification du /actions/footer.php (ajout lien vers page/imprime).
Action UserLogin
Retrait du formulaire d'enregistrement de nouveaux utilisateurs dans /actions/usersettings.php et enregistrement sous le nom de userlogin.php.
Handler prez
- Modification du fichier /formatters/wakka.php pour prendre en considération: #F#, #D#, ~
- Ajout des fichiers prez.php, prez2.php, prez3.php dans /handlers/page/ (contrôle la sortie).
- Ajout d'une action prez (fichier /action/prez.php) pour afficher un lien vers les 3 styles différents.
- Modification du fichier /actions/attach.class.php afin que l'image update.png ne soit pas visible dans la présentation.
Action indiquer
- Ajout du fichier indiquer.php dans /actions
- Voici le code de ce fichier et des ajouts à faire dans wakka.css:
<?php
/*
Copyright 2004 .... OF SUCH DAMAGE.
*/
$texte = $this->getParameter("texte");
$ici = $this->getParameter("ici");
$voir = $this->getParameter("voir");
$haut = $this->getParameter("haut");
$bas = $this->getParameter("bas");
echo "<div class=\"ancrer\">";
if(!empty($haut)) echo '<a href="#'. $haut .'">Haut</a> ';
if(!empty($bas)) echo '<a href="#'. $bas .'">Bas</a> ';
echo "</div>";
echo "<div class=\"ancre\">";
if(!empty($ici)) echo '<b><A NAME="'.$ici.'"></A></b> ';
if(!empty($voir)) echo '<a href="#'. $voir .'">'. $voir .'</a> ';
if(!empty($texte) ) echo '<b><A NAME="'.$texte.'"></A></b> '. $this->Format($texte);
echo "</div>";
?>
Voici le style correspondant. À noter que les lien Haut et Bas seront situés à droite pour différencier.
.ancrer {
float: right;
}
.ancre a {
color: red;
}
Commentaires + groupe
ligne 208 du fichier wakka.php
-de if ($this->HasAccess("write", $tag)) à if ($this->HasAccess("write", $tag) OR $comment_on != "")
Fonction Freemind (code utilisé:
http://wikka.jsnx.com/FreeMind)
on met le fichier freemindbrowser.jar dans la racine du wikinimst.
ajouté des styles dans wakka.css (.floatr {float: right; width: 48%; margin: 0.5%; padding: 0.5%; background: #EEE;}) et imprime.css (.floatr {display: none;})
========================================================================
ajouté dans attach.class.php
function showAsMindmap($fullFilename){//pour freemind
$mindmap_url = $this->wiki->href("download",$this->wiki->GetPageTag(),"file=$this->file");
$height = "550";
$mindmap_url_fullscreen = "3rdparty/plugins/freemind/fullscreen.php?url=$mindmap_url";
$output =
"<applet code=\"freemind.main.FreeMindApplet.class\" archive=\"freemindbrowser.jar\" width=\"100%\" height=\"$height\">\n".
" <param name=\"type\" value=\"application/x-java-applet;version=1.4\" />\n".
" <param name=\"scriptable\" value=\"false\" />\n".
" <param name=\"modes\" value=\"freemind.modes.browsemode.BrowseMode\" />\n".
" <param name=\"browsemode_initial_map\" value=\"$mindmap_url\" />\n".
" <param name=\"initial_mode\" value=\"Browse\" />\n".
" <param name=\"selection_method\" value=\"selection_method_direct\" />\n".
"</applet>\n".
"<br />\n".
"<span class=\"floatr\"><a href=\"$mindmap_url\">Télécharger ce réseau de concept</a> :: Utiliser <a href=\"http://freemind.sourceforge.net/\">Freemind</a> pour l'éditer. Plein écran: cliquer sur Imprimer ci-dessous.</span><div style=\"clear:both;\"></div>\n";
print($output);
}
function isFreemind(){//pour freemind
return preg_match("/.(mm)$/i",$this->file)==1;
}
=========================================================================
et modifié la fonction doAttach de ça:
function doAttach(){
$this->CheckParams();
if ($this->attachErr) {
echo $this->attachErr;
return;
}
$fullFilename = $this->GetFullFilename();
//test d'existance du fichier
if((!file_exists($fullFilename))||($fullFilename=='')){
$this->showFileNotExits();
return;
}
//le fichier existe : affichage en fonction du type
if($this->isPicture()){
$this->showAsImage($fullFilename);
}
else{
$this->showAsLink($fullFilename);
}
}
à ça:
function doAttach(){
$this->CheckParams();
if ($this->attachErr) {
echo $this->attachErr;
return;
}
$fullFilename = $this->GetFullFilename();
//test d'existance du fichier
if((!file_exists($fullFilename))||($fullFilename=='')){
$this->showFileNotExits();
return;
}
//le fichier existe : affichage en fonction du type
if($this->isPicture()){
$this->showAsImage($fullFilename);
}
elseif($this->isFreemind()){//pour freemind
$this->showAsMindmap($fullFilename);
}
else{
$this->showAsLink($fullFilename);
}
}
Fontion Geogebra
Mettre geogebra.jar à la racine du WikiNiMST.
Ajouter la fonction suivante dans attach.class.php
/**
* Affiche le fichier geogebra dans une boite.
*/
function showAsGeogebra($fullFilename){//pour geogebra
$geogebra_url = $this->wiki->href("download",$this->wiki->GetPageTag(),"file=$this->file");
//$height = "550";
//$mindmap_url_fullscreen = "3rdparty/plugins/freemind/fullscreen.php?url=$mindmap_url";
$output =
"<applet code=\"geogebra.GeoGebraApplet\" archive=\"geogebra.jar\" width=\"100%\" height=\"450\">\n".
" <param name=\"filename\" value=\"$geogebra_url\" />\n".
" <param name=\"framePossible\" value=\"false\" />\n".
"</applet>\n".
"<br />\n".
"<span class=\"floatr\"><a href=\"$geogebra_url\">Télécharger ce fichier GeoGebra</a> :: Utiliser <a href=\"http://www.geogebra.at/\">GeoGebra</a> pour l'éditer. Plein écran: cliquer sur Imprimer ci-dessous.</span><div style=\"clear:both;\"></div>\n";
print($output);
$this->showUpdateLink();
}
puis modifié la fonction suivante
/**
* Affiche l'attachement
*/
function doAttach(){
$this->CheckParams();
if ($this->attachErr) {
echo $this->attachErr;
return;
}
$fullFilename = $this->GetFullFilename();
//test d'existance du fichier
if((!file_exists($fullFilename))||($fullFilename=='')){
$this->showFileNotExits();
return;
}
//le fichier existe : affichage en fonction du type
if($this->isPicture()){
$this->showAsImage($fullFilename);
}
elseif($this->isFreemind()){//pour freemind
$this->showAsMindmap($fullFilename);
}
elseif($this->isGeogebra()){//pour geogebra
$this->showAsGeogebra($fullFilename);
}
else{
$this->showAsLink($fullFilename);
}
}
Finalement pour reconnaître que c'est un fichier geogebra on cré la fonction
function isGeogebra(){//pour geogebra
return preg_match("/.(ggb)$/i",$this->file)==1;
}
Fonction Geonext
Mettre geonext.jar à la racine du
WikiNiMST.
ajouter dans attach.class.php
/**
* Affiche le fichier geonext dans une boite.
*/
function showAsGeonext($fullFilename){//pour geogebra
$geonext_url = $this->wiki->href("download",$this->wiki->GetPageTag(),"file=$this->file");
//$height = "550";
//$mindmap_url_fullscreen = "3rdparty/plugins/freemind/fullscreen.php?url=$mindmap_url";
$output =
"<applet id=\"umf_rect\" code=\"geonext.Geonext.class\" archive=\"geonext.jar\" width=\"100%\" height=\"500\">\n".
" <param name=\"geonext\" value=\"file:$fullFilename\" />\n".
" <param name=\"scriptable\" value=\"true\" />\n".
" <param name=\"MAYSCRIPT\" value=\"true\" />\n".
"</applet>\n".
"<br />\n".
"<span class=\"floatr\"><a href=\"$geonext_url\">Télécharger ce fichier GeoNext</a> :: Utiliser <a href=\"http://www.geogebra.at/\">GeoNext</a> pour l'éditer. Plein écran: cliquer sur Imprimer ci-dessous.</span><div style=\"clear:both;\"></div>\n";
print($output);
$this->showUpdateLink();
}
ainsi que
function isGeonext(){//pour geogebra
return preg_match("/.(gxt)$/i",$this->file)==1;
}
et on ajoute dans la fonction doAttach
elseif($this->isGeonext()){//pour geogebra
$this->showAsGeonext($fullFilename);
}
Fonction Geolabo
Ajouter geoweb.jar à la racine du
WikiNiMST
Ajout de la fonction suivante dasn attach.class.php:
/**
* Affiche le fichier geolabo dans une boite.
*/
function showAsGeolabo($fullFilename){//pour geolabo
$geolabo_url = $this->wiki->href("download",$this->wiki->GetPageTag(),"file=$this->file");
//$height = "550";
//$mindmap_url_fullscreen = "3rdparty/plugins/freemind/fullscreen.php?url=$mindmap_url";
$output =
"<applet code=\"geolabo.geoweb.class\" codebase=\".\" archive=\"geoweb.jar\" width=\"100%\" height=\"450\">\n".
" <param name=\"figure\" value=\"$fullFilename\" />\n".
" <param name=\"framePossible\" value=\"false\" />\n".
"</applet>\n".
"<br />\n".
"<span class=\"floatr\"><a href=\"$geogebra_url\">Télécharger ce fichier Geolabo</a> :: Utiliser <a href=\"http://www.bibmath.net/geolabo/index.php3/\">Geolabo</a> pour l'éditer. Plein écran: cliquer sur Imprimer ci-dessous.</span><div style=\"clear:both;\"></div>\n";
print($output);
$this->showUpdateLink();
}
ajout de cette fonction:
function isGeolabo(){//pour geogebra
return preg_match("/.(glb)$/i",$this->file)==1;
}
et modification de doAttach:
elseif($this->isGeolabo()){//pour geolabo
$this->showAsGeolabo($fullFilename);
}
Édition suppression des commentaires
Ajout d'un handler/deletecomment.php
et modification du fichier /handler/page/show.php
//Ajouter pour l'édition et suppression des commentaires
if ($this->HasAccess('write', $comment['tag'])
|| $this->UserIsOwner($comment['tag'])
|| $this->UserIsOwner() || ($this->GetUserName()== $this->config[admin_wiki]) )
{
echo '<div class="commenteditlink">';
if ($this->HasAccess('write', $comment['tag']))
{
echo '<a href="',$this->href('edit',$comment['tag']),'">Éditer ce commentaire</a>';
}
if ($this->UserIsOwner($comment['tag'])
|| $this->UserIsOwner() || ($this->GetUserName()== $this->config[admin_wiki]))
{
echo '<br />','<a href="',$this->href('deletecomment',$comment['tag']),'">Supprimer ce commentaire</a>';
}
//echo "$comment[comment_on]";
echo "</div>\n";
}
//FIn de edition suppression commentaire
Modification de la fonction suivante dans wakka.php
function SavePage($tag, $body, $comment_on = "") {
// get current user
$user = $this->GetUserName();
//die($tag);
// TODO: check write privilege
if ($comment_on ? $this->HasAccess("comment", $comment_on)
: $this->HasAccess("write", $tag))
{
// is page new?
if (!$oldPage = $this->LoadPage($tag))
{
// create default write acl. store empty write ACL for comments.
$this->SaveAcl($tag, "write", ($comment_on ? $user : $this->GetConfigValue("default_write_acl")));
// create default read acl
$this->SaveAcl($tag, "read", $this->GetConfigValue("default_read_acl"));
// create default comment acl.
$this->SaveAcl($tag, "comment", ($comment_on ? "" : $this->GetConfigValue("default_comment_acl")));
// current user is owner; if user is logged in! otherwise, no owner.
if ($this->GetUser()) $owner = $user;
else $owner = '';
}
else
{
// aha! page isn't new. keep owner!
$owner = $oldPage["owner"];
// ...and comment_on, eventualy?
if ($comment_on == '') $comment_on = $oldPage['comment_on'];
}
// set all other revisions to old
$this->Query("update ".$this->config["table_prefix"]."pages set latest = 'N' where tag = '".mysql_Escape_string($tag)."'");
// add new revision
$this->Query("insert into ".$this->config["table_prefix"]."pages set ".
"tag = '".mysql_escape_string($tag)."', ".
($comment_on ? "comment_on = '".mysql_escape_string($comment_on)."', " : "").
"time = now(), ".
"owner = '".mysql_escape_string($owner)."', ".
"user = '".mysql_escape_string($user)."', ".
"latest = 'Y', ".
"body = '".mysql_escape_string(chop($body))."'");
}
}
Ajout dans wakka.css de :
.commenteditlink { float: right; margin: 2; }
Modification du forward dans /handler/page/edit.php:
// forward
if ($this->page['comment_on']) {
$this->Redirect($this->href('', $this->page['comment_on']).'#'.$this->tag);
}
else {
$this->Redirect($this->href());
}
Ajout de la fonction flash
Ajout flash
dans attach.class.php
var $haut = ''; //hauteur swf
var $large = ''; //largeur swf
function isFlash(){//pour geogebra
return preg_match("/.(swf)$/i",$this->file)==1;
}
dans la fonction doAttach:
elseif($this->isFlash()){//pour geolabo
$this->showAsFlash($fullFilename);
}
pour vérifier si les valeur de haut et large sont ok, dans CheckParams:
if ($this->isFlash() && empty($this->haut)){
$this->attachErr .= $this->wiki->Format("//action attacher : paramètre **haut** obligatoire pour une animation flash//---");
}
if ($this->isFlash() && empty($this->large)){
$this->attachErr .= $this->wiki->Format("//action attacher : paramètre **large** obligatoire pour une animation flash//---");
}
et finalement pour faire afficher le code html:
/**
* Affiche le fichier flasho dans une boite.
*/
function showAsFlash($fullFilename){//pour geolabo
$flash_url = $this->wiki->href("download",$this->wiki->GetPageTag(),"file=$this->file");
//$height = "550";
//$mindmap_url_fullscreen = "3rdparty/plugins/freemind/fullscreen.php?url=$mindmap_url";
$haut=$this->haut;
$large=$this->large;
$output =
"<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" width=\"$haut\" height=\"$large\">
<param name=\"movie\" value=\"$fullFilename\">
<param name=\"quality\" value=\"high\">
<param name=\"LOOP\" value=\"false\">
<param name=\"menu\" value=\"false\">\n".
"<embed src=\"$fullFilename\" loop=\"false\" width=\"$haut\" height=\"$large\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" menu=\"false\"></embed>\n".
"</object>\n".
"<br />\n".
"<span class=\"floatr\"><a href=\"$flash_url\">Télécharger ce fichier Flash</a> Plein écran: cliquer sur Imprimer ci-dessous.</span><div style=\"clear:both;\"></div>\n";
print($output);
$this->showUpdateLink();
}
Fonction lecteur
Mp3?: on ajoute à la racine du wikinimst le lecteur xspf.swf
http://musicplayer.sourceforge.net/
Ajout de cette fonction dans attach.class.php:
/**
* Affiche le fichier mp3 dans un player flash.
*/
function showAsMp3($fullFilename){
$titre=$this->desc;
$mp3_url = $this->wiki->href("download",$this->wiki->GetPageTag(),"file=$this->file");
$output =
"<object type=\"application/x-shockwave-flash\" data=\"xspf.swf?song_url=$fullFilename&song_title=$titre\" width=\"200\" height=\"20\"><param name=\"quality\" value=\"low\" /><param name=\"movie\" value=\"xspf.swf?song_url=$fullFilename&song_title=$titre\" /> </object>\n".
"<br />\n".
"<a href=\"$mp3_url\">Télécharger $this->desc</a>\n";
print($output);
$this->showUpdateLink();
}
et celle-ci:
function isMp3(){//pour mp3 dans player flash
return preg_match("/.(mp3)$/i",$this->file)==1;
}
et ajouter à la fonction doAttach:
elseif($this->isMp3()){//pour lecteur mp3
$this->showAsMp3($fullFilename);
}
Cacher l'image upload.png si pas accès en écriture sur la page:
Ajout de ce code dans le <head> de la page:
<?php if ($this->HasAccess('write', $comment['tag'])) { ?>
<style type="text/css">
.handout { }
</style>
<?php
}
else { ?>
<style type="text/css">
.handout { display: none; }
</style>
<?php
} ?>
Fonction CSV
http://wikkawiki.org/ShowCsv
On ajoute le fichier /handlers/page/handlecsvdata.php
On modifie le fichier /action/attach.class.php
var $separateur = ''; //séparateur pour csv
var $entete = ''; //entete pour csv
$this->separateur = $this->wiki->GetParameter("separateur");
if (empty($this->separateur)) $this->separateur = $this->wiki->GetParameter("separateur");
$this->entete = $this->wiki->GetParameter("entete");
if (empty($this->entete)) $this->entete = $this->wiki->GetParameter("entete");
dans la fonctione doAttach:
elseif($this->isCsv()){//pour csv
$this->showAsCsv($fullFilename);
}
Et pour l'affichage:
function isCsv(){//pour csv dans un tableau
return preg_match("/.(csv)$/i",$this->file)==1;
}
/**
* Affiche le fichier csv dans un tableau.
*/
function showAsCsv($fullFilename){
require_once('handlers/page/handlecsvdata.php');
$csv_url = $this->wiki->href("download",$this->wiki->GetPageTag(),"file=$this->file");
// ***Get the params ***
$header= 'on';
$separator = ",";
$filename = $fullFilename;
//$tableclass = $vars['tableclass'];
if ($this->separateur) $separator = $this->separateur;
if ($this->entete) $header = $this->entete;
// *** Get the data and print the table ***
if (is_array($table = GetCsvData($filename, $separator, $tableclass))) PrintCsvTable($table, $header);
echo "<a href=\"$csv_url\">Télécharger $this->desc</a>";
$this->showUpdateLink();
}
Ajout dans le CSS
#csvtable {
border: thin solid #6495ed;
border-collapse: collapse;
text-align: center;
}
#csvtable th {
font-family: monospace;
border: thin solid #6495ed;
padding: 5px;
background-color: #D0E3FA; }
#csvtable td {
font-family: monospace;
border: thin solid #6495ed;
padding: 5px;
background-color: #fff; }
Ajout du formatage (action) note:
http://wikkawiki.org/SidenoteActions
Ajout dans le CSS:
/* sidenote.css */
/* Contains css for tip, note and warn actions. */
/* postit note-style information box */
#note {
clear: both;
font-size: 10pt;
float: right;
width: 200px;
border: 1px solid #AAAAAA;
margin: 15px 10px 0px 0px;
padding: 0px;
background-color: #FFF900;
text-align: justify;
vertical-align: top;
}
#note hr {
height: 1px;
border: 1px solid #AAAAAA;
width: 100%;
}
#note .title {
text-align: center;
font-weight: bold;
background-color: #EEE800;
border-bottom: 1px solid #AAAAAA;
color: #000000;
}
#note #text {
padding: 4px;
color: #000000;
}
Ajout de l'Action note.php:
<?php
/*
note action
Displays a sidebar note (like a post-it)
Syntax: {{note text="text"}}
*/
$text = htmlspecialchars($vars['texte']);
if ($vars['titre']=="") { $title="Note";}
else { $title = htmlspecialchars($vars['titre']);}
?>
<div id="note">
<div class="title"><?php echo $title; ?></div>
<div id="text">
<?php echo $text; ?>
</div>
</div>
Ajout formatage tableau+csv
Ajout de ce code dans le fichier /formatters/wakka.php
// Tables
else if (preg_match("/^(\|\|)(.*?)(\|\|)$/s", $thing, $matches))
{
$result = "\n<table id=\"csvtable\">\n";
$matches[2] = trim($matches[2]);
$lignes = split ("\n", $matches[2]);
$code=$matches[2];
$lien=$wiki->href();
$n = 0;
foreach ($lignes as $ligne)
{
if ($n==0) {
$result .= "<tr>\n";
$colonnes = split (";", $ligne);
foreach ($colonnes as $colonne) {
$result .= "<th>".$colonne."</th>\n";
}
$result .= "</tr>\n";
$n++;
}
else {
$result .= "<tr>\n";
$colonnes = split (";", $ligne);
foreach ($colonnes as $colonne) {
$result .= "<td>".$colonne."</td>\n";
}
$result .= "</tr>\n";
$n++;
}
}
$result .= "</table>\n\n";
$result .="<form action=\"$lien/grabcode\" method=\"post\">
<br /><input type=\"submit\" name=\"save\" class=\"grabcodebutton\" value=\"-> .csv\" title=\"Télécharger le contenu du tableau (csv)\" />
<input type=\"hidden\" name=\"contenu\" value=\"$code\" /></form>\n";
return $result;
}
// fin Tables
Ajout du fichier /handlers/page/grabcode.php pour télécharger le fichier csv:
<?php
if (!eregi("wakka.php", $_SERVER['PHP_SELF'])) {
die ("accès direct interdit");
}
$contenu = $_POST[contenu];
header('Content-type: application/force-download');
header("Content-type: text/plain");
header('Content-Disposition: attachment; filename="tableau.csv"');
// display raw page
echo $contenu;
?>
Désactivation des lecteurs (geonext, mp3, ...) par admin et utilisateur:
Modification du fichier attach.class.php
On ajoute au haut du fichier:
var $voir = ''; //pour afficher contenu fichier
et dans checkparams:
$this->voir = $this->wiki->GetParameter("voir");
if (empty($this->voir)) $this->voir = "oui";
On ajoute à chaque fonction comme isFreemind:
if ($this->wiki->config[view_freemind]==1 && $this->voir==oui)
Aussi, ajouter dans le fichier /setup/writeconfig.php ceci:
$config["view_geonext"] = "1";
$config["view_geogebra"] = "1";
$config["view_geolabo"] = "1";
$config["view_flash"] = "1";
$config["view_mp3"] = "1";
$config["view_csv"] = "1";
$config["view_freemind"] = "1";
Ajout d'une question avant enregistrement d'une page et d'un commentaire.
Modification des pages /handlers/page/show.php, addcomment.php, edit.php.
On fait calculer la somme de 2 nombres aléatoires (entre 0 et 9).
Ajout dans le CSS: .question {color:#c71f1f; font-weight: bold;}
Action lien
<?php
/*
lien action
{{lien url="http://lien.com" texte="Texte du lien" titre="Titre du lien" image="http://lienversimage"}}
*/
if (empty($vars['url'])) echo "Pas de critère url!";
else {
$url = htmlspecialchars($vars['url']);
$text = htmlspecialchars($vars['texte']);
$image = htmlspecialchars($vars['image']);
$title = htmlspecialchars($vars['titre']);
if (!preg_match("/:\/\//", $url))
{
$url = "http://".$url; //Very important for xss (avoid javascript:() hacking)
}
if (empty($text)) $text = $url;
if (!preg_match("/:\/\//", $image))
{
$image = "http://".$image;
}
if (!empty($vars['image'])) $text = "<img src=\"$image\" border=\"0\" alt=\"$text\">";
echo '<a href="' . $url . '" title="' . $title . '">' . $text . '</a>';
}
?>