"

","}}}"=>"

","{{"=>"","}}"=>"","{"=>"","}"=>"","----"=>'
', '[url="'=>'',"[/url]"=>"","[u]"=>"","[/u]"=>"", "[img]"=>''" border="0" alt="" />','[img|right]'=>'"
","[/quote]"=>"
"); var $regex = "(([A-ZÔÊÎ]+[a-zéàèâûôùçêî]+){2,})+([A-Z0-9]+)?"; var $module_regex = array("^<\?php\$",//"^class module \{\$", "^\\\$module\[name\] = \"([^\"]+)\";\$", "^\\\$module\[description\] = \"([^\"]+)\";\$","^(\\\$module\[files\]\['([a-z0-9_.<>-]+)'\] = \"([^\"]+)\";){1,}\$","\?>\$"); var $version = "0.5.5 (beta)"; var $url_site = "http://wiki.kubbe.eu.org/"; var $charset = "ISO-8859-15"; var $send_charset_headers = FALSE; var $txt = array( "perms"=>"Vous n'avez pas les permissions pour écrire dans ce répertoire. Les permissions sont actuellement [perms] alors qu'elles devraient être 777. Cependant il se peut que le processus de détection des permissions fonctionne mal. Dans ce cas cliquez sur le bouton retour pour l'outrepasser.", "mkdir"=>"Impossible de créer les répertoires pour faire fonctionner le wiki. Vérifiez les permissions, elle devraient être en 777.", "inconnu"=>"Erreur inconnue. Peut-être est-ce dû à un problèmes de permissions.", "ask_pass"=>"Cet espace est réservé à l'administrateur du site. Si vous êtes cette personne, donnez votre mot de passe dans le champ ci-dessous et cliquez sur Connexion, sinon allez voir ailleurs.", "logout"=>"Vous avez été déconnecté. Cliquez sur le bouton ci-dessous pour vous reconnecter.", "maj" => array("0.3.x" => "La version de WikiKubbe qui est installée est la 0.3.x. Pour passer à la nouvelle version 0.4 de WikiKubbe vous devez effectuer une mise à jour.\n\nCette mise à jour va créer un répertoire http://votresite.com/wiki.docs/ si votre wiki est à l'adresse http://votresite.com/wiki/.\n\nCeci vous permettra de bénéficier des nouvelles fonctionnalités de WikiKubbe comme la gestion intuitive des images ou des visuels.") ); function dekod($c) { if(!empty($c)) return gzinflate(base64_decode($c)); } function filtre($texte) { $texte = htmlspecialchars(stripslashes($texte)); $texte = str_replace("\r","",$texte); $i=1; $pos = strpos($texte,"[code]"); while(is_numeric($pos)) { $code[$i] = substr($texte,$pos+6,strpos($texte,"[/code]") - ($pos+6)); $texte = str_replace("[code]".$code[$i]."[/code]","",$texte); $pos = strpos($texte,"[code]"); $i++; } $texte = eregi_replace("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero):[A-Za-z0-9/](([A-Za-z0-9$_.+!*(),;/?:@&~=_-])|%[A-Fa-f0-9]{2})+)",'\\0',$texte); $texte = eregi_replace("(^|[ \t\r\n])([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)", '\\0', $texte); while(ereg("(^|[ \t\r\n])({$this->regex})",$texte,$el)) $texte = str_replace($el[0],$el[1].''.$el[2].'',$texte); $texte = eregi_replace("(^|[ \t\r\n])\[([^\n]+\.(png|jpe?g|gif))\]",'\\1',$texte); while(eregi("(^|[ \t\r\n])\[([a-z0-9_ éàîôùçèûêâ\.-]+)\]",$texte,$el)) $texte = str_replace($el[0],$el[1].''.$el[2].'',$texte); $texte = strtr($texte,$this->tags); $texte = nl2br($texte); for($i=1;$i <= count($code); $i++) $texte = str_replace("",'

'.trim($code[$i]).'

',$texte); $texte = str_replace("@","@",$texte); return $texte; } function get_default_template() { if($this->separateur[1] == "/") $path = "../"; $template = << #TITRE #TRANSITION

#TITRE

#TEXTE
#INFOS
ENDOFFILE; return $template; } // Affichage d'une page (template) // Array( "titre", "texte", "form" => "action du formulaire", "bouton" => "intitulé du bouton", // "infos" => "Infos bas de page", "page" => "nom de la page"); function affiche_page($rec) { //$titre,$texte,$form,$bouton,$infos,$page) { if($rec[page] == "PageDaccueil") $rec[titre] = $this->conf[nom_wiki]; $template = $this->get_default_template(); if(file_exists($this->datas."page.html")) { $f = file($this->datas."page.html"); $template = implode("",$f); } if(empty($rec[transition])) $rec[transition] = "\n"; $template = str_replace("#TITRE",htmlentities(stripslashes($rec[titre])),$template); $template = str_replace("#INFOS",$rec[infos],$template); $template = str_replace("#FORM",$rec[form],$template); $template = str_replace("#BOUTON",htmlentities(stripslashes($rec[bouton])),$template); $template = str_replace("#NOM_WIKI",$this->conf[nom_wiki],$template); $template = str_replace("#TRANSITION",$rec[transition],$template); $template = str_replace("#PAGE",$rec[page],$template); $template = str_replace("#TEXTE",$rec[texte],$template); if($this->send_charset_headers) header("Content-Type: text/html; charset={$this->charset}"); return $template; } function show_conf() { if($this->conf[type] == "prive") $prive = "checked=\"checked\""; else $libre = "checked=\"checked\""; if(!empty($this->conf[ip])) $ip = "checked=\"checked\""; if(!empty($this->conf[pass])) $pass = "checked=\"checked\""; $this->conf[nom_wiki] = htmlentities(stripslashes($this->conf[nom_wiki])); $t.= <<

Type de wiki:

Authentification du wiki pour l'administration:

END; $rec = array("titre"=>"Configuration","texte"=>$t,"form"=>$this->separateur[3]."action=configuration","bouton"=>"Enregistrer","page"=>"configuration", "infos"=>"url_site}\">Aide de WikiKubbe"); echo $this->affiche_page($rec); } function do_conf() { if(empty($_POST[nom])) return $this->show_error("Vous n'avez pas spécifié le nom de votre wiki.","configuration"); elseif($_POST[pass1] == "oui" && empty($_POST[pass2])) return $this->show_error("Vous n'avez pas spécifié de mot de passe alors que vous avez coché la se correspondante.","configuration"); elseif($_POST[ip1] == "oui" && empty($_POST[ip2])) return $this->show_error("Vous n'avez pas spécifié d'adresse IP alors que vous avez coché la se correspondante.","configuration"); $fp = @fopen($this->datas."config.inc.php","w"); if(!$fp) return $this->show_error($this->txt[inconnu]); $cont = ""; fputs($fp,$cont); fclose($fp); return TRUE; } function show_error($t,$p="") { $t = nl2br(htmlentities(stripslashes($t))); $rec = array("titre"=>"Erreur","texte"=>$t,"form"=>$this->separateur[2].$p,"bouton"=>"Retour","page"=>"rien", "infos"=>"url_site}\">Aide de WikiKubbe"); echo $this->affiche_page($rec); return FALSE; } function do_inst($force=FALSE) { $perms = decoct(@fileperms($this->fichier)) % 1000; # if(!$force && $perms < 755) return $this->show_error(str_replace("[perms]",$perms,$this->txt[perms]),"force_inst"); $r = @mkdir(substr($this->datas,0,-1),0777); $r = @mkdir(substr($this->public,0,-1),0777); if(!$r) return $this->show_error($this->txt[mkdir]); $fp = @fopen($this->datas."version","w"); if(!$fp) return $this->show_error($this->txt[inconnu]); fputs($fp,$this->version); fclose($fp); $fp = @fopen($this->datas.".htaccess","w"); if(!$fp) return $this->show_error($this->txt[inconnu]); fputs($fp,"Allow from none\nDeny from All\n"); fclose($fp); return TRUE; } function show_maj($ver,$fic="") { $t = $this->txt[maj][$ver]; $t = nl2br(htmlentities(stripslashes($t))); $t.= ""; $rec = array("titre"=>"Mise à jour","texte"=>$t,"form"=>$this->separateur[3]."action=maj","bouton"=>"Effectuer la mise à jour","page"=>"maj", "infos"=>"url_site}\">Aide de WikiKubbe"); if(!empty($fic)) $rec[form] = $fic; echo $this->affiche_page($rec); } function lire($page) { $f = @file($this->datas.$page.".kub"); if(!$f) return FALSE; $out = implode("",$f); $rec[date] = filemtime($this->datas.$page.".kub"); if(file_exists($this->datas.$page.".mod")) { $rec[modif] = filemtime($this->datas.$page.".mod"); $tmp = @file($this->datas.$page.".mod"); $rec[ip] = $tmp[0]; } else $rec[modif] = "1"; $rec[texte] = $out; return $rec; } function do_save($p,$txt) { $fp = @fopen($this->datas.$p.".kub","w"); if(!$fp) return FALSE; fputs($fp,$txt); fclose($fp); return TRUE; } function show_page($p) { $rec = $this->lire($p); if($rec === FALSE) $rec = array( "texte"=>"Pour écrire dans cette page cliquez sur le bouton Editer.", "date"=>"Page inexistante","infos"=>"Page inexistante"); else { $rec[texte] = $this->filtre($rec[texte]); if($this->auth == "oui") $rec[infos] = "MàJ le ".date("d/m/Y H:i",$rec[date]).' - Administration'; else $rec[infos] = "Dernière mise à jour le ".date("d/m/Y H:i",$rec[date]); } $rec[form] = $this->separateur[2]."editer~".urlencode($p); $rec[bouton] = "Editer"; $rec[page] = urlencode($p); $rec[titre] = strtr($p,array("_"=>" ","."=>" / ")); echo $this->affiche_page($rec); } function edit_page($p) { if(file_exists($this->datas.$p.".lock")) $lock=TRUE; if(file_exists($this->datas.$p.".unlock")) $unlock=TRUE; if(($this->conf[type] == "prive" || $lock) && ($this->auth != "oui") && !$unlock) { $this->show_error("Cette page est protégée contre l'édition.",$p); exit; } $rec = $this->lire($p); if((($rec[modif] > 1) && ($rec[modif] > time()-3600) && ($_SERVER[REMOTE_ADDR] != $rec[ip])) && $this->auth != "oui") return $this->show_error("Cette page est déjà en train d'être modifiée par une autre personne.",$p); if($rec !== FALSE) { $fp = @fopen($this->datas.$p.".mod","w"); if($fp) { fputs($fp,$_SERVER[REMOTE_ADDR]); fclose($fp); } } $rec[texte] = " "; if($this->auth == "oui") { $t = '
'; if($this->conf[type] == "libre") { $t.= ''; } else { $t.= ''; } $t.= 'Administration
'; $rec[texte].= $t; } $rec[titre] = "Edition de {$p}"; $rec[form] = $this->separateur[2]."enregistrer~".urlencode($p); $rec[bouton] = "Enregistrer"; $rec[infos] = 'Retour'; if(file_exists($this->datas."module.wysiwyg")) $rec[transition] = ''; echo $this->affiche_page($rec); } function set_lock($p,$t,$v="") { if(file_exists($this->datas.$p.".".$t)) if(empty($v)) @unlink($this->datas.$p.".".$t); else if(!empty($v)) { $fp = @fopen($this->datas.$p.".".$t,"w"); @fclose($fp); } return TRUE; } function save_page($p,$texte,$lock="",$unlock="") { @unlink($this->datas.$p.".mod"); // Protection anti-hacking (maximum de 32Ko par page) if(strlen($texte) > 32000) die("Texte trop long. (max 32Ko)."); if(empty($texte)) { @unlink($this->datas.$p.".lock"); @unlink($this->datas.$p.".unlock"); @unlink($this->datas.$p.".kub"); } else { if($this->auth == "oui") { if($_POST[lock]) $t = "lock"; else $t = "unlock"; $this->set_lock($p,$t,$_POST[$t]); } $this->do_save($p,$texte); return TRUE; } } function reset_page($p) { @unlink($this->datas.$p.".mod"); return TRUE; } function ask_pass($file="") { $rec = array("titre"=>"Administration","form"=>$this->separateur[3]."action=administration","bouton"=>"Connexion","page"=>"administration", "texte"=>"

".$this->txt[ask_pass]."

\n\n"); if(!empty($file)) $rec[texte].= ""; echo $this->affiche_page($rec); } function module_load($file) { //print_r(gzinflate(base64_decode($file))); $file = $this->dekod($file); $file = trim($file); $f = explode("\n",$file); foreach($f as $n=>$c) { $r = $this->module_regex[$n]; if(strpos($c,"\$module[files]") === TRUE) $r = $this->module_regex[3]; if(!eregi($r,$c)) $nok = TRUE; } if(eregi("[()]",$file) || $nok) { $this->show_error("Tentative d'installation d'un module non-conforme au standard ModuloKub. C'est peut-être une tentative de piratage de votre wiki."); exit; } $fp = @fopen($this->datas."install.tmp","w"); if($fp) { fputs($fp,$file); fclose($fp); } return TRUE; } function login($pass="",$file="") { setcookie("kubpass",$pass,0,"/"); if(!empty($pass) && $pass != $this->conf[pass]) $this->show_error("Mauvais mot de passe.","?action=administration"); if($pass == $this->conf[pass] && !empty($file)) $this->module_load($file); return TRUE; } function admin($file="",$module="") { if(!empty($file)) $this->module_load($file); $rec = array("titre"=>"Administration","form"=>$this->separateur[3]."action=administration","bouton"=>"Déconnexion","page"=>"administration", "infos"=>'Configuration

'); if(file_exists($this->datas."install.tmp")) { $module->nom = htmlentities(stripslashes($module->nom)); $module->description = htmlentities(stripslashes($module->description)); $rec[texte] = "

Installation de module

Vous avez téléchargé le module suivant:

Nom: {$module[name]}
Description: {$module[description]}

Voulez-vous installer ce module? separateur[3]}action=mod_install\">Oui - separateur[3]}action=mod_remove\">Non"; } elseif($this->check_maj() && !file_exists($this->datas."lock_maj")) { $rec[texte] = "

Nouvelle version disponible

Une nouvelle version de WikiKubbe est disponible sur le site officiel. Voulez-vous l'installer?

Voulez-vous installer cette mise à jour?   separateur[3]}action=download_maj\">Oui   separateur[3]}action=lock_maj\">Non

"; } else { $rec[texte].= "

Bienvenue dans l'espace administrateur de WikiKubbe version {$this->version}. Pour avoir plus d'informations n'hésitez pas à consulter url_site}\">l'aide de WikiKubbe.

"; } $rec[texte].= ""; echo $this->affiche_page($rec); } function mod_install($mod) { foreach($mod[files] as $n=>$file) { $n = str_replace("",$this->datas,$n); $n = str_replace("",$this->public,$n); //if(file_exists($n)) $file = $this->dekod($file); $fp = @fopen($n,"w"); fputs($fp,$file); fclose($fp); } @unlink($this->datas."install.tmp"); return TRUE; } function check_maj() { $f = @file($this->url_site."metas/version"); $nver = explode(" ",trim($f[0])); $ver = explode(" ",trim($this->version)); $nver = explode(".",trim($nver[0])); $ver = explode(".",trim($ver[0])); foreach($nver as $k=>$v) if($v > $ver[$k]) return TRUE; return FALSE; } function download_maj() { $f = @file($this->url_site."metas/update"); if(!$f) return FALSE; $f = implode("",$f); $fp = fopen($this->datas."update.tmp","w"); fputs($fp,$f); fclose($fp); return TRUE; } function do_maj() { mkdir(substr($this->public,0,-1),0777); $fp = fopen($this->datas."version","w"); fputs($fp,$this->version); fclose($fp); return TRUE; } function get_filename($file) { if($file == "css") $file = array("wiki.css","Edition de la feuille de style"); else $file = array($this->datas."page.html","Edition du squelette"); return $file; } function edit_file($name,$titre="") { $file = $this->get_filename($name); $f = @file($file[0]); if($f) $f = implode("",$f); if(!$f && $name == "template") $f = $this->get_default_template(); $rec = array("form"=>"{$this->separateur[3]}action=file_".$name,"bouton"=>"Enregistrer","page"=>$file, "infos"=>"separateur[3]}action=administration\">Administration

","titre"=>$file[1]); $rec[texte] = ''; echo $this->affiche_page($rec); } function save_file($name,$content) { $file = $this->get_filename($name); $fp = fopen($file[0],"w"); if(!$fp) return FALSE; fputs($fp,stripslashes($content)); fclose($fp); return TRUE; } function show_debug($fi,$pa) { echo '

Informations WikiKubbe:

datas: '.$this->datas.'
public: '.$this->public.'
fichier: '.$fi. '
path: '.$pa.'
action: '.$_GET[action].'

Informations PHP

';
        print_r($_SERVER);
        echo '

Configuration

';
        print_r(htmlspecialchars(implode("",file($this->datas."config.inc.php"))));
        echo "
"; exit; } } // FIN DE LA CLASSE WIKI //////////////////////////////////////////////////////////////////////////// $wiki = new wiki(); if(strchr($_SERVER[PATH_TRANSLATED],"free.fr")) { if(empty($fichier)) { echo "Vous devez spécifier le nom du fichier à l'intérieur du fichier wiki.php (ceci est spécifique à l'hébergeur free.fr)."; exit; } $separateur_rep = FALSE; } if(empty($fichier)) $fichier = basename($_SERVER[SCRIPT_FILENAME]); $wiki->fichier = $fichier; $path = $_SERVER[PATH_INFO]; $wiki->datas = $fichier.".pages/"; $wiki->public = $fichier.".docs/"; if($separateur_rep) $separateur = array(1=>"/","./","./?"); else $separateur = array(1=>"?",$fichier."?",$fichier."?"); $wiki->separateur = $separateur; $action = $_GET[action]; if($_GET[debug]) { $wiki->show_debug($fichier,$path); exit; } if($separateur_rep) { if(substr($path,0,1) != "/") header("location: {$fichier}/PageDaccueil"); elseif(empty($action) && ($path == "/")) header("location: ./PageDaccueil"); else $page = substr($path,1); } else { if(empty($action)) $page = $_SERVER[argv][0]; if(empty($page) && empty($action)) header("location: {$fichier}?PageDaccueil"); } $page = urldecode($page); if(strchr($page,"~")) { $t = explode("~",$page); $page = $t[1]; $mode = $t[0]; } if(file_exists($wiki->datas."update")) { $f = file($wiki->datas."update"); unlink($f[0]); unlink($wiki->datas."update"); } if(file_exists($wiki->datas."config.inc.php")) { require_once($wiki->datas."config.inc.php"); $wiki->conf = array("nom_wiki"=>$nom_wiki,"type"=>$type); if(!empty($ip)) $wiki->conf[ip] = $ip; if(!empty($pass)) $wiki->conf[pass] = $pass; } else { $action = "configuration"; $wiki->conf[nom_wiki] = "WikiKubbe"; $inst = "oui"; } if(!file_exists($wiki->datas."version") || !is_dir($wiki->public)) { $action = "maj"; $ver = "0.3.x"; } if(!is_dir($wiki->datas)) { $action = "installation"; if($page == "force_inst") $force = TRUE; } if((($_COOKIE[kubpass] == $wiki->conf[pass]) && (($wiki->conf[ip] == $_SERVER[REMOTE_ADDR]) || empty($wiki->conf[ip]))) || (empty($wiki->conf[pass]) && ($wiki->conf[ip] == $_SERVER[REMOTE_ADDR])) || (empty($wiki->conf[pass]) && empty($wiki->conf[ip]))) $wiki->auth = "oui"; // ORIENTION VERS LA BONNE PAGE //////////////////////////////////////////////////////////////////////////// if($action == "configuration") { if($wiki->auth != "oui" && $inst != "oui") { $wiki->show_error("Vous n'avez pas l'autorisation de configurer le wiki.","PageDaccueil"); exit; } if($_POST) { if(!$wiki->do_conf()) exit; else header("location: {$separateur[2]}PageDaccueil"); } else $wiki->show_conf(); } elseif($action == "installation") { $wiki->do_inst($force); exit; } elseif($action == "download_maj") { $wiki->download_maj(); header("location: {$separateur[3]}action=maj"); } elseif($action == "maj") { if($_POST) { $from = $_POST[from]; $to = $_POST[to]; $wiki->do_maj($from,$to); } else { if(!$ver) { include_once($wiki->datas."update.tmp"); $ver = $update[version]; $wiki->txt[maj][$ver] = $update[texte]; $f = $wiki->dekod($update[file]); $f = str_replace("#FICHIER",basename($fichier),$f); $fp = @fopen($update[name],"w"); fputs($fp,$f); fclose($fp); $fic = "../".$update[name]; } $wiki->show_maj($ver,$fic); } } elseif($action == "do_maj") { $wiki->do_maj(); header("location: {$separateur[2]}PageDaccueil"); } elseif($action == "administration") { if($_POST[logout]) { $wiki->login(); $wiki->show_error($wiki->txt[logout],"administration"); } elseif($_POST[pass]) { if($wiki->login($_POST[pass],$_POST[file])) header("location: {$separateur[3]}action=administration"); } elseif($wiki->auth == "oui") { if(file_exists($wiki->datas."install.tmp")) include_once($wiki->datas."install.tmp"); $wiki->admin($_POST[file],$module); } elseif($wiki->auth != "oui" && !empty($wiki->conf[pass])) $wiki->ask_pass($_POST[file]); else $wiki->show_error("Vous n'avez pas l'autorisation d'accéder à cette page.","PageDaccueil"); } elseif($action == "mod_install" && $wiki->auth == "oui") { if(!file_exists($wiki->datas."install.tmp")) $wiki->show_error("Pas de module de téléchargé."); else { include_once($wiki->datas."install.tmp"); $wiki->mod_install($module); header("location: {$separateur[3]}action=administration"); } } elseif(($wiki->auth == "oui") && (substr($action,0,5) == "file_")) { $file = substr($action,5); if($_POST) { $wiki->save_file($file,$_POST[texte]); header("location: {$separateur[3]}action=administration"); } else $wiki->edit_file($file); } else { if($mode == "enregistrer") { $wiki->save_page($page,$_POST[texte],$_POST[protec],$_POST[unprotec]); header("location: ".$separateur[2].$page); } elseif($mode == "editer") $wiki->edit_page($page); elseif($mode == "raz") { $wiki->reset_page($page); header("location: ".$separateur[2].$page); } else $wiki->show_page($page); } ?>