# Manuel du développeur

> Ce document décrit en quelques mots le design à la base de Moodle et comment vous pouvez contribuer à son développement.

> Il est un peu succinct pour l'instant. Une meilleure documentation est prévue !

> Sections de ce document :

> 1. Architecture de Moodle
> 2. Comment vous pouvez aider
>    - Activités d'apprentissage
>    - Thèmes
>    - Langues
>    - Schémas de la base de données
>    - Formats de cours
>    - Documentation et articles
>    - Participer à la traque des bogues

## 1. Architecture de Moodle

> Du point de vue d'un administrateur de système, Moodle a été conçu selon les critères suivants :

> 1. Moodle doit fonctionner sur le plus grand nombre possible de plateformes différentes
>    Le langage de programmation pour le web qui tourne sur la plupart des plateformes est PHP, en combinaison avec MySQL, et c'est l'environnement dans lequel Moodle a été développé (sur Linux, Windows et Mac OS X). Moodle utilise aussi la librairie ADOdb pour l'abstraction de la base de données, ce qui implique que Moodle peut utiliser plus de 10 marques de bases de données différentes (toutefois, il ne peut malheureusement pas encore mettre en place les tables de toutes ces bases de données. Voir ci-dessous pour plus d'informations).
> 2. Moodle doit être facile à installer, à apprendre et à modifier
>    Les premiers prototypees de Moodle (1999) étaient basés sur Zope, un serveur d'application web orienté objet de technologie avancée. Malheureusement, bien que cette technologie soit plutôt cool, elle avait une courbe d'apprentissage très raide et n'était pas très souple en termes d'administration de systèmes. D'un autre côté, le langage de scripts PHP est très facile d'accès, notamment si vous avez déjà programmé avec un autre langage de scripts. J'ai pris assez tôt la décision de ne pas utiliser un concept orienté objet, là encore, pour conserver la simplicité par égard pour les novices. En lieu et place, la réutilisation du code est accomplie grâce à des librairies de fonctions clairement dénommées et par une mise en page cohérente des fichiers de scripts. En outre, PHP est facile à installer (des exécutables sont disponibles pour toutes les plateformes) et si largement répandu que la plupart des services d'hébergement web l'offrent en standard.
> 3. Moodle doit être facile à mettre à jour d'une version à la suivante
>    Moodle connaît son propre numéro de version (ainsi que ceux de chacun des modules) et un mécanisme y a été implémenté de sorte qu'il puisse se mettre à jour tout seul (il peut par exemple renommer les tables de la base de données ou y ajouter de nouveaux champs). Si vous utilisez CVS sur Unix, vous pouvez par exemple taper la commande « cvs update -d », puis visiter la page d'accueil de votre site pour terminer la mise à jour.
> 4. Moodle doit être modulaire pour pouvoir grandir facilement
>    Un grand nombre de fonctionnalités de Moodle sont modulaires, notamment les thèmes, les activités, les langues de l'interface, les schémas de la base de données et les formats de cours. Cela permet à quiconque d'ajouter des fonctionnalités au code principal ou encore de distribuer des modules séparément. Voir ci-dessous pour plus d'informations à ce sujet.
> 5. Moodle doit pouvoir être utilisé en association avec d'autres systèmes
>    Moodle conserve tous les fichiers d'un cours dans le même dossier sur le serveur. Cela permet à un administrateur système d'offrir pour chaque enseignant n'importe quel type d'accès direct aux fichiers, comme AFP, SMB, NFS, FTP, WebDAV, etc. Les modules d'authentification permettent à Moodle d'utiliser LDAP, MAP, POP3, NNTP et d'autres bases de données comme source des données des utilisateurs. Il reste toutefois pas mal de travail à effectuer. Les fonctionnalités prévues de Moodle pour les versions à venir comprennent notamment : l'importation et l'exportation des données en format XML (y compris IMS et SCORM) et l'utilisation croissante des feuilles de style pour l'interface (permettant ainsi une meilleure incorporation dans d'autres sites web).

## 2. Comment vous pouvez aider

> Comme mentionné ci-dessus, bon nombre de fonctionnalités de Moodle sont modulaires. Même si vous n'êtes pas programmeur, il y a des choses que vous pouvez modifier ou pour lesquelles vous pouvez nous aider.

> ### Activités d'apprentissage

> > Ce sont les modules les plus importants. Ils sont placés dans le dossier « mod ». Il y a quelques modules installés par défaut, notamment : devoir, sondage, test, forum, consultation, wiki, etc. Chaque module est placé dans un sous-dossier propre et consiste en divers éléments obligatoires (ainsi que d'autres scripts propres à chaque module) :

> > - mod.html : un formulaire pour configurer ou mettre à jour une instance de ce module
> > - version.php : définit quelques méta-informations et met à disposition du code pour les mises à jour
> > - icon.gif : une icône 16x16 pour le module
> > - db/ : des « dumps » SQL de toutes les tables de la base de données et des données elles-mêmes (pour chaque type de base de données)
> > - index.php : une page permettant d'afficher la liste de toutes les instances du module dans un cours
> > - view.php : une page permettant d'afficher une instance particulière
> > - lib.php : toutes les fonctions définies par le module doivent s'y trouver. Si le nom du module est « bidule », les fonctions nécessaires sont notamment :
> >   - bidule_add_instance() : code pour ajouter une nouvelle instance de bidule
> >   - bidule_update_instance() : code pour mettre à jour une instance existante
> >   - bidule_delete_instance() : code pour effacer une instance
> >   - bidule_user_outline() : étant donnée une instance, retourne un résumé d'une contribution d'un utilisateur
> >   - bidule_user_complete() : étant donnée une instance, affiche les details d'une contribution d'un utilisateur
> >   - Pour éviter tout conflit éventuel, le nom de toutes les fonctions du module doit commencer par « bidule_ » et celui de toutes les constantes par « BIDULE_ »
> > - Finalement, chaque module comportera des fichiers de langue, qui contiennent les chaînes de caractères du module. Voir ci-dessous pour des détails.

> > Pour programmer un nouveau module d'activité, le plus simple est d'utiliser le modèle mod/newmodule_template.zip. Décompressez-le est suivez les instructions du fichier README inclus.

> > Il est également judicieux de poster auparavant un message sur le forum Activities modules dans le cours « Using Moodle ».

> ### Thèmes

> > Les thèmes (ou « skins ») définissent l'aspect d'un site. Quelques thèmes simples sont fournis dans la distribution de Moodle. Vous pouvez aussi créer votre propre thème avec vos couleurs, logo, styles et graphiques préférés.

> > Chaque thème est placé dans un sous-dossier « theme » qui contient au moins les fichiers suivants :

> > - config.php : permet de configurer la façon dont les fichiers CSS interagissent. Vous pouvez construire votre thème à partir du thème standard ou de n'importe quelle thème parent, ainsi qu'inclure ou exclure plusieurs fichiers CSS.
> > - styles.php : fait le relais vers les fichiers CSS. Aucune modification n'est nécessaire.
> > - header.html : le fichier incorporé au début de chaque page. Pour ajouter un logo au sommet de chaque page, c'est ce fichier qui devra être modifié.
> > - footer.html : le fichier incorporé à la fin de chaque page.
> > - styles_color.css : feuille de styles CSS pour toutes les propriétés de couleur.
> > - styles_fonts.css : feuille de styles CSS pour le choix des polices, corps, hauteurs de ligne, etc.
> > - styles_layout.css : feuille de styles CSS pour la mise en page, le positionnement, etc.
> > - styles_moz.css : feuille de styles CSS pour les coins arrondis de Mozilla et autres navigateurs à moteur Gecko.

> > Pour créer votre propre thème avec la version actuelle de Moodle :

> > 1. Copiez le dossier d'un des thèmes existant et donner un nouveau nom à la copie. Il est recommandé de commencer avec l'un des thèmes standard.
> > 2. Modifiez le fichier config.php en y insérant les réglages nécessaires à vos besoins.
> > 3. Modifier les fichiers CSS (voir ci-dessus) avec vos propres styles.
> > 4. Ouvrez header.html et footer.html pour y ajouter les nouveaux logos ou pour modifier la mise en page.

> > Il est à noter que les mises à jour de Moodle pourraient empêcher le fonctionnement correct d'un thème personnalisé. Vérifiez les notes de mise à jour si vous utilisez un tel thème.

> > Veuillez lire attentivement la description détaillée des thèmes de Moodle dans la documentation sur les thèmes Moodle.

> > Pour en savoir plus, participez à la discussion sur le forum Themes dans le cours « Using Moodle ». Si vous créez un joli thème susceptible d'intéresser d'autres utilisateurs, merci de poster votre fichier zip sur ce même forum.

> ### Langues

> > Moodle a été conçu pour permettre son internationalisation. Chaque chaîne de caractères et chaque page de texte faisant partie de l'interface est affichée à partir d'un ensemble de fichiers de langue. Chaque langue consiste en un sous-dossier du dossier « lang ». La structure du dossier lang est la suivante :

> > lang/fr : dossier contenant tous les fichiers pour une langue (dans ce cas le français)

> > - moodle.php : chaînes de l'interface principale
> > - assignment.php : chaînes du module devoir
> > - choice.php : chaînes du module sondage
> > - forum.php : chaînes du module forum
> > - quiz.php : chaînes du module test
> > - resource.php : chaînes du module ressource
> > - survey.php : chaînes du module consultation
> > - ... ainsi que d'autres modules le cas échéant.
> >   Chaque chaîne est tirée de ces fichiers à l'aide des fonctions get_string() ou print_string(). Toutes les chaînes permettent la substitution des variables, afin de permettre un ordre différent des variables dans les différentes langues.
> >   Par exemple, $strdueby = get_string("assignmentdueby", "assignment", userdate($date));
> >   Si une chaîne n'est pas définie dans une langue, la chaîne équivalente en anglais est automatiquement utilisée à la place.

> > lang/fr/help : contient toutes les pages d'aide (pour l'aide contextuelle, fenêtres « popup »)

> > > Les pages d'aide principales y sont stockées, alors que les pages d'aide spécifiques aux différents modules sont placées dans des sous-dossiers portant le nom du module.

> > > Vous pouvez insérer un bouton d'aide dans une page au moyen de la fonction helpbutton().

> > > Par exemple, helpbutton("text", "Cliquer ici pour obtenir de l'aide sur le texte");

> > > et pour les modules :

> > > helpbutton("forumtypes", "Types de forums", "forum");

> > Vous pouvez modifier en ligne les fichiers de langue, en utilisant les outils web d'administration « Configuration -> Langue ». Cela vous permet non seulement de créer de nouvelles langues, mais aussi de perfectionner les traductions existantes. Si vous vous attaquez à une nouvelle langue, merci de me contacter, Martin Dougiamas.

> > Vous pouvez aussi participer au forum Languages du cours « Using Moodle ».

> > Si vous entretenez les fichiers d'une langue de manière régulière, je peux vous donner un accès CVS en écriture au code source de Moodle, afin que vous puissiez ainsi directement modifier les fichiers.

> ### Schémas de la base de données

> > Une fois définies la base de données et ses tables, le langage SQL intentionnellement simple utilisé par Moodle devrait fonctionner correctement avec un grand nombre de marques de bases de données.

> > Il peut arriver que la création automatique des nouvelles tables d'une base de données pose problème. Cette opération a lieu lors de l'installation initiale de Moodle. Parce que les diverses bases de données sont très différentes, il n'existe pas encore de moyen de faire cela indépendamment de la plateforme. Pour permettre cette automatisation dans chaque type de base de données, des schémas de base de données peuvent être créés, qui comportent les commandes SQL nécessaires pour créer pour une base de données particulière les tables qu'utilise Moodle. Ces schémas sont des fichiers dans lib/db ainsi que dans le sous-dossier db de chaque module.

> > Actuellement, seul MySQL et PostgreSQL sont supportés de cette manière (personne n'a encore écrit les schémas pour d'autres marques).

> > Moodle 1.2 utilisera une nouvelle méthode de schémas XML indépendants de la base de données, qui rendra tout cela inutile.

> ### Formats de cours

> > Moodle offre actuellement trois formats de cours différents : hebdomadaire, thématique et informel.

> > Ces formats sont un peu plus dépendants du reste du code (et par conséquent moins modulaires), mais il est malgré tout assez facile d'en ajouter de nouveaux.

> > Si vous avez des idées de formats différents dont vous auriez l'utilité ou que vous aimeriez voir dans Moodle, prenez contact avec moi et je ferai tout mon possible pour les rendre disponibles dans de futures versions.

> ### Documentation et articles

> > Si vous avez envie d'écrire un tutoriel, un article, une publication universitaire ou quoi que ce soit d'autre sur Moodle, ne vous en privez pas !

> > Publiez-le sur le web et assurez-vous de mettre des liens vers http://moodle.org/.

> ### Participer à la traque des bogues

> > J'aimerais pour terminer vous inviter à vous inscrire sur le « bug tracker » à l'adresse http://moodle.org/bugs, afin que vous puissiez annoncer tous les bogues que vous découvrirez et peut-être participer à la discussion et à la correction des bogues.

> > Les « bogues » ne sont pas seulement les erreurs du code source des versions actuelles de Moodle. Ce sont aussi les nouvelles idées, les demandes de nouvelles fonctionnalités et même la critique constructive des fonctionnalités existantes. La beauté du logiciel libre est de permettre à chacun de participer d'une façon ou d'une autre et d'aider à créer une meilleur produit pour le bien de tous. Dans ce projet, votre contribution est la bienvenue !

> > > Nous vous remercions d'utiliser Moodle !
> > > Martin Dougiamas, développeur principal

Documentation Moodle

Version: $Id: developer.html,v 1.15.2.5 2006/02/06 09:59:43 moodler Exp $