Wikini

WikiniCommeBibliotheque

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-54-243-17-113.compute-1.amazonaws.com

Transformer Wikini en bibliothèque de code


Dans le cadre du site web de Tela Botanica, nous avons été amené à utiliser des Wikini. Nous avons voulu rendre accessible le contenu du Wikini depuis notre CMS en lecture seulement.
Cela a été facilement réalisable grâce à la présence de la classe Wiki.

Les modifications effectué sur la version 0.3 de Wikini


Dans wakka.php
Récupération de tous les fichiers et dossier de Wikini et mise dans un dossier spécifique.
Suppression dans le wakka.php de tout le code à l'exterieur de la classe Wiki sauf les contantes définissant les versions de Wakka et de Wikkini.
Remplacement des print par des return dans le switch en fin de classe Wiki.
Utilisation du chemin des formatters défini dans le fichier de config:
<?php
function Format($text$formatter "wakka"
    {
        
//Modification : inclusion d'un chemin d'accès provenant du fichier de config.
        
return $this->IncludeBuffered($formatter.".php""<i>Impossible de trouver le formateur \"$formatter\"</i>"compact("text"), $this->config["formatters_path"] ); 
    }
?>


Dans formatters/wakka.php
Ajout des lignes commentées avec ATTENTION (voir le code ci-dessous) pour éviter les Warning de PHP. Je pense que ces modifications pourraient être apporté au fichier actuel.
<?php
// indented text
        
else if (preg_match("/\n(\t+|([ ]{1})+)(-|([0-9,a-z,A-Z]+)\))?/s"$thing$matches))
        {
            
// new line
            
$result .= ($br "<br />\n" "");

            
// we definitely want no line break in this one.
            
$br 0;

            
// find out which indent type we want
            
if ( ! isset( $matches[3]) ) $matches[3] = false;//ATTENTION : ajout de cette ligne
            
$newIndentType $matches[3];
            if (!
$newIndentType) { $opener "<div class=\"indent\">"$closer "</div>"$br 1; }
            else if (
$newIndentType == "-") { $opener "<ul>\n"$closer "</li>\n</ul>"$li 1; }
            else { 
                if ( ! isset( 
$matches[4]) ) $matches[4] = '';//ATTENTION : ajout de cette ligne
                
$opener "<ol type=\"".$matches[4]."\">\n"$closer "</li>\n</ol>"$li 1
            }

            
// get new indent level
            
            
if (strpos($matches[1],"\t")) $newIndentLevel strlen($matches[1]);
            else
            {
                
$newIndentLevel=$oldIndentLevel;
                
$newIndentLength strlen($matches[1]);
                if (
$newIndentLength>$oldIndentLength)
                { 
                    
$newIndentLevel++;
                    
$newIndentSpace[$newIndentLength]=$newIndentLevel;
                }
                else if (
$newIndentLength<$oldIndentLength)
                        if ( ! isset( 
$newIndentSpace[$newIndentLength] ) ) $newIndentSpace[$newIndentLength] = 0;//ATTENTION : ajout de cette ligne
                        
$newIndentLevel=$newIndentSpace[$newIndentLength];
            }
            
$op=0;
            if (
$newIndentLevel $oldIndentLevel)
            {
                for (
$i 0$i $newIndentLevel $oldIndentLevel$i++)
                {
                    
$result .= $opener;
                    
$op=1;
                    
array_push($indentClosers$closer);
                }
            }
            else if (
$newIndentLevel $oldIndentLevel)
            {
                for (
$i 0$i $oldIndentLevel $newIndentLevel$i++)
                {
                    
$op=1;
                    
$result .= array_pop($indentClosers);
                            if (
$oldIndentLevel && isset($li)) $result .= "</li>";//ATTENTION : ajout de isset($li) à la place de$li
                
}
            }

            if (isset(
$li) && $op$result .= "<li>";
            else if (isset(
$li))
                
$result .= "</li>\n<li>";

            
$oldIndentLevel $newIndentLevel;
            
$oldIndentLength$newIndentLength;

            return 
$result;
        }
?>


Dans le tableau $wakkaDefaultConfig

Ajout d'une ligne pour indiquer le chemin des formatters :
"formatters_path" => "php/lib/wikini/formatters",

L'application pour visualiser le contenu en lecture seule
Le contenu des pages que je visualise avec cette application n'ont pas de lien vers les pages de fonctionnement du Wikini (DerniersChangements, ParametresUtilisateur....).

<?php
    $wikini_config_defaut 
= array(
        
'wakka_version'         => '',
        
'debug'                       => 'yes',
        
"mysql_host"              => HOTE,
        
"mysql_database"      => BD_WIKINI,
        
"mysql_user"              => UTILISATEUR,
        
"mysql_password"      => MDP,
        
"table_prefix"              => "wikini_",
        
"root_page"                 => "NomDeVotrePremierPage",
        
"wakka_name"             => "NomDeVotreSiteWikini",
        
"base_url"                    => 'votre_url_de_base_dans_application_de_visualisation',
        
"rewrite_mode"            => '0',
        
'meta_keywords'          => 'vos_mots_clés',
        
'meta_description'        => 'Le code de nomenclature de St Louis.',
        
"action_path"                => "php/lib/wikini/actions"//Exemple de chemin d'accès
        
"handler_path"              => "php/lib/wikini/handlers"//Exemple de chemin d'accès
        
"formatters_path"          => "php/lib/wikini/formatters"//Exemple de chemin d'accès
        
"header_action"               => "header",
        
"footer_action"                 => "footer",
        
"navigation_links"          => "DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur",
        
"referrers_purge_time"  => 24,
        
"pages_purge_time"      => 90,
        
"default_write_acl"         => "*",
        
"default_read_acl"         => "*",
        
"default_comment_acl" => "*",
        
"preview_before_save" => "0");;
        
    
// Démarrage de la session php
    
session_start();
    
    
// Récupération du nom de la page wikini recherchée
    
if ( ! isset( $_REQUEST["wiki"] ) ) {
        
$wiki 'NomDeVotrePremierePage';
    }
    else {
        
$wiki $_REQUEST["wiki"];
    }
    
    
// Gestion de la variable de session "linktracking"
    
if ( ! isset( $_SESSION["linktracking"] ) ) {
        
$_SESSION["linktracking"] = 1;
    }
    
    
// Suppression des slash.
    
$wiki preg_replace("/^\//"""$wiki);
    
    
// split into page/method
    
if ( preg_match"#^(.+?)/(.*)$#"$wiki$matches ) ) {
        list(, 
$page$method) = $matches;
    }
    else if ( 
preg_match"#^(.*)$#"$wiki$matches ) ) {
        list(, 
$page) = $matches;
    }
    
    
// create wiki object
    
$wiki = new Wiki$wikini_config_defaut );

    
// Vérification de la méthode d'affichage employée!
    
if ( ! isset( $method ) ) {
        
$method '';//la valeur vide fonctionne bien.
    
}
    
//Récupération du contenu de la page Wikini
    
$sortie =  $wiki->Run($page$method);
    
    echo 
$sortie;
?>


Amélioration des fichiers du Wikini version 0.4

Ce travail m'a permis de repérer quelques parties du code de Wikini qui pourraient être améliorée.
Je liste ici quelques suggestion à discuter :

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]