Architecture et développement de Yeswiki

Dossiers et fichiers de la distribution

actions : contient les actions yeswiki de base que l'on peut mettre entre accolades par ex: {{nomdelaction parametre="valeur du paramètre"}}
cache : contient les vignette, cache des flux rss , et autre (peut être vidé)
files : contient les fichiers uploades par les utilisateurs
formatters : contient les fichiers qui gerent la syntaxe wiki (les ==== pour titres etc)
handlers/page : actions a passer dans l'url /edit /raw /show /revisions /acls
includes : bibliothèques php utilisées par le code, dont les classes php principales de yeswiki
lang : dossier de langues
setup : dossier appelle à l'installation (s'il ne trouve pas de fichier wakka.config.php)
themes : contient les themes et les templates (voir http://yeswiki.net/cercopitheque/wakka.php?wiki=DocumentationChangerThemeGraphique)
tools : contient les extensions de base de YesWiki
vendor : bibliothèques externes
.gitignore : fichier de config de git (pour dire les fichier et dossier qu'il ne doit pas surveiller)
COPYING : texte de présentation de licence à lire
INSTALL : texte de présentation de l'install à lire
LICENSE : texte de présentation de licence à lire
README.md : texte de présentation générale de yeswiki (apparaît en bas de github)
index.php : fichier lancé par défaut, initialise yeswiki
interwiki.conf : ancienne conf pour gérer l'inter wiki (plus trop utilisé)
robots.txt : directives pour les robots des moteurs de recherche
tools.php : gestion et administration des extensions (nécessite de s'identifier avec le mot de passe MySQL)
wakka.basic.css : graphisme par défaut de wiki si l'extension templates n'est pas utilisée
wakka.config.php : fichier de configuration de yeswiki, contient les informations pour se connecter à la base de données entre autre, si ce fichier est inexistant, la procédure d'installation se lance
wakka.css : graphisme par défaut de wiki si l'extension templates n'est pas utilisée
wakka.php : nom historique présent pour retro-compatibilité, renvoie à index.php

Créer des themes YesWiki

TODO : cours plus détaillé
Pour créer un nouveau thème, il vaut mieux dupliquer un thème existant et le glisser dans le dossier themes.

Créer des actions YesWiki

Exemple pratique de l'action {{salutations}}

si l'on ajoute un fichier salutations.php dans le dossier actions, ce sera automatiquement reconnu comme un action wiki
exemple de contenu :

affichage de base

<?php
echo "bonjour c'est moi !";

Dans ce cas {{salutations}} écrit dans une page wiki affiche "bonjour c'est moi !

utiliser des parametres

<?php
$name = $this->GetParameter("name");  // permet de recuperer le parametre "name" (nom de quelqu'un) ex: ""{{salutations name="Florian" }}"" 
$adjectif = $this->GetParameter("adjectif");  // permet de recuperer le parametre "name" (nom de quelqu'un) ex: ""{{salutations name="Florian" adjectif="le magnifique"}} ""
echo "bonjour ".$name." ".$adjectif.", c'est moi !";

test des parametres

<?php
$name = $this->GetParameter("name");  // permet de recuperer le parametre "name" (nom de quelqu'un) ex: ""{{salutations name="Florian" }} ""
if (empty($name)) {
    echo "Erreur : action salutations : le parametre 'name' est obligatoire..";
} else {
    echo "bonjour ".$name." , c'est moi !";
}

ajout au fichier de configuration wakka.config.php

'moment_de_la_journee' => "jour" // ou "nuit"

dans l'action
<?php
// travailler avec un element du fichier de configuration
if ($this->config["moment_de_la_journee"] == 'jour') {
    echo "bonjour";
} elseif ($this->config["moment_de_la_journee"] == 'nuit') {
    echo "bonsoir";
}

requetes SQL

dans l'action
<?php
// pour les insert, update, delete, actions qui ne renvoient par de resultat
// Le prefixe des tables est sauvegardé dans le fichier config (clé : table_prefix)
// efface tout l'historique des page
$this->Query('DELETE FROM '.$this->config['table_prefix'].'pages WHERE latest="N";');
// Pour les select
$this->LoadAll('SELECT * FROM '.$this->config['table_prefix'].'pages WHERE latest="Y";'); // sort tous les résultats
$this->LoadSingle('SELECT * FROM '.$this->config['table_prefix'].'pages WHERE latest="Y";'); // sort uniquement le premier résultat

liens

//affiche le lien en mode edition de la page courante
echo $this->href('edit', $this->GetPageTag());
// affiche le lien en mode consultation de la page ToTo
echo $this->href('', 'ToTo');
$this->GetPageTag() // donne la page où on se trouve

gestion des droits

$this->HasAccess('read', $this->GetPageTag() [, user= ""]);
$this->HasAccess('write', $this->GetPageTag());
$this->HasAccess('comment', $this->GetPageTag());
$this->UserIsAdmin() // l'utilisateur est il admin
$this->GetUser() // l'utilisateur est il admin


Créer des extensions YesWiki

Pour démarrer

Important

En cas de conflit de nom, par exemple, si plusieurs extensions ont le même nom, ou si plusieurs tools ont le même nom, ou si plusieurs actions ont le même nom (vous voyez l'idée ?)
L'exécution se fait dans l'ordre alphabétique. Ce comportement est propagé dans les actions de ces tools et entre les tools entre eux
Exemple : L'action monaction.php du tools tools1 s'exécute avant l'action monaction.php du tools2

Après, c'est plus ou moins open bar


Piste de standardisation du code

Bonnes pratiques
Composer : https://getcomposer.org/ gestion des dependances php et autoload
Norme php :
- PSR-1 PSR-1: Basic Coding Standard
- PSR-2 Coding Style Guide

Editeur de code opensource
- Visual Studio Code https://code.visualstudio.com/
- Atom https://atom.io/
- Eclipse avec PDT (Php Development Tool)