Développement de YesWiki


Dépôts git utilisés

https://github.com/YesWiki/yeswiki : dépôt du code de YesWiki
https://github.com/YesWiki/yeswiki-themes : thèmes open source de YesWiki
https://github.com/YesWiki/yeswiki-external-extensions : extensions supplémentaires de YesWiki à mettre dans le dossier tools

Commandes git utiles pour gérer 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
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 lance par défaut, renvoie à wakka.php
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 : le fichier principal de yeswiki : contient la classe Wiki et toutes les méthodes utilisées dans les actions et handlers (Query() href() )


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


Extensions YesWiki


Respecter les dossiers comme pour l'architecture de base de YesWiki
- Créer des actions dans le dossier actions
- Créer des handler dans le dossier handler/Page
- idem formatters, lang..
- on peut exécuter des bidouilles en amont ou après l’exécution d'une action, d'un handler ou d'un formatter en mettant des underscores :
  • nomdufichier.php pour avant
  • nomdufichier.php pour apres

Tout ceci queue s'il n'y a besoin.
L’exécution des tools 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 wakka.php du tools tools1 s'exécute avant l'action wakka.php du tools2


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
- Atom
  • https://atom.io/
  • avec des linter : des outils pour vérifier si le code respecte des standards
- Eclipse avec PDT (Php Development Tool)
  • contient un built-in formatter pour PSR-2

Outillage pour le développeur


- Comment "profiler" le code:

Anciens liens

Backlog YesWiki Postits de suivi du Sprint Etherpad des dévs Archives du pad
Bloc Note
Suggestions d'amélioration Signaler un problème Communauté YesWiki (développement & usages) Docs et tutoriaux pour développeurs

Mailing list Développeurs

Vous êtes développeur en PHP, Javascript ou intégrateur graphique HTML / CSS, la liste de discussion devs est prévue pour échanger avec vos confrères!

 codes documentation développeurs expert git github php