====== Créer un module ====== La création d'un module est assez simple. Toutefois, pour des raisons d'organisation, la création de modules a des contraintes, notamment pour nommer les tables qu'il utilise dans la base de données. ===== Le code de base d'un module ===== Voici le code de base d'un module. J'ai pris pour exemple le minichat (**minichat.php**). Il est sufisemment commenté pour que vous puissiez le comprendre ;-) . **Note :** La création d'un module est assez contraigante, car il faut pouvoir gérer le module depuis l'interface d'administration, et éviter les conflits entre les modules. C'est pour cela qu'il faut respecter quelques conventions de nommage. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. NB : Les modules que vous créez doivent être sous licence GPL. */ //code fixe require('include/common.php'); $module = array('nom' => 'Minichat', 'prefix' => 'minichat', 'options' => '0'); /* L'array $module doit contenir : -Le nom de votre module, celui qui sera visible par les membres, -Le préfixe de votre module. Ce préfixe est en fait le nom du fichier de votre module sans l'extension. -Enfin, options vaut 0 s'ils n'y a pas d'options, 1 s'il y en a (pas d'utilisation de booléen car cette valeur va être entrée dans la BDD) */ //On vérifie que le membre est connecté. if (isset($_SESSION[$prefix.'logged']) && $_SESSION[$prefix.'logged'] === true) { if($_SESSION[$prefix.'admin'] == 1 AND isset($_GET['admin_action']))//Options d'administration du module { if($_GET['admin_action'] == 'installer')//confirmation d'installation. Il faut afficher un message d'avertissement. { echo stop('Vous vous apprêtez à installer le module '.$module['nom'].'.
Les modules ne sont ni officiels, ni pris en charge par kankanSpace.
Je confirme l'installation', ''); //Note : si vous modifiez une table du kankanSpace "de base", c'est ici qu'il faut le signaler. } elseif($_GET['admin_action'] == 'installer_confirme')//code d'installation { //si ce module à besoin de tables particulières, on les crées (éventuellement une table pour le stockage des options) mysql_query('CREATE TABLE `'.$prefix.$module['prefix'].'` (`id` int(11) NOT NULL AUTO_INCREMENT, `pseudo` varchar(255) NOT NULL, `message` text NOT NULL, KEY `id` (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;'); //dans tous les cas, on le déclare dans la table des modules (si l'array est correctement rempli, cette requête n'est pas à modifier) mysql_query('INSERT INTO '.$prefix.'modules(fichier, nom, options, date_installation, membre_installateur) VALUES (''.$module['prefix'].'.php', ''.$module['nom'].'', '.$module['options'].', '.time().', '.$_SESSION[$prefix.'id'].')'); //insertion des liens(même chose, en principe, l'on a pas besoin de toucher à cette requete) mysql_query('INSERT INTO '.$prefix.'liens(texte, adresse, visible_membres, apparaitre_menu) VALUES (''.$module['nom'].'', ''.$module['prefix'].'.php', 1, 1)'); //affichage du message de confirmation echo stop('Le module '.$module['nom'].' a bien été installé.', $module['prefix'].'.php'); } elseif($_GET['admin_action'] == 'desinstaller')//confirmation de désinstallation : on affiche un message { echo stop('Vous vous apprêtez à désinstaller le module '.$module['nom'].'.
La désinstalaltion d`un module est irréversible.
Il est fortement conseillé de sauvegarder votre base de données avant de procéder à la désinstalation de ce module.
Je confirme la désinstallation', 'admin_modules.php'); } elseif($_GET['admin_action'] == 'desinstaller_confirme')//code de désinstallation { //suppression des tables du module mysql_query('DROP TABLE '.$prefix.$module['prefix']); //suppression de l'entrée dans la table module mysql_query('DELETE FROM '.$prefix.'modules WHERE fichier=''.$module['prefix'].'.php''); //suppression des liens mysql_query('DELETE FROM '.$prefix.'liens WHERE adresse=''.$module['prefix'].'.php''); //message de confirmation echo stop('Le module '.$module['nom'].' a bien été désinstallé.', 'admin_modules.php'); } else//Options du module (s'il en a) { designhaut('Options - '.$module['nom']); //Si vous avez des options, c'est ici qu'il faut les mettre. Il n'y a pas de convention. Je vous conseille toutefois de renvoyer le formulaire vers la page du module avec le paramètre admin_action=options et de vérifier si le formulaire est rempli. designbas(); } } else//si ce n'est pas une option d'administration, code normal. { designhaut($module['nom']); //A partir de maintenant, à vous de jouer ! echo '

'.$module['nom'].'

Actualiser'; //suppression d'un message (si l'on est admin) if($_SESSION[$prefix.'admin'] == 1 AND isset($_GET['action'], $_GET['id']) AND $_GET['action'] == 'supprimer' AND !empty($_GET['id'])) { $id = intval($_GET['id']); mysql_query('DELETE FROM '.$prefix.$module['prefix'].' WHERE id='.$id); echo '

Suppression du message :

Le message '.$id.' a bien été supprimé.'; } if (isset($_POST['pseudo'], $_POST['message']) AND !empty($_POST['pseudo']) AND !empty($_POST['message'])) // Si les variables existent { $message = mysql_real_escape_string(htmlentities($_POST['message'])); $pseudo = $_SESSION[$prefix.'pseudo']; mysql_query('INSERT INTO '.$prefix.$module['prefix'].' VALUES('', ''.$pseudo.'', ''.$message.'')'); } ?>

Entrez un message :


Message :


Messages postés :

'.$donnees['pseudo'].' : '.$donnees['message']; if ($_SESSION[$prefix.'admin'] == 1) { echo '
Supprimer'; } ?>

'; //Code fixe de nouveau, pour terminer les conditions du début et afficher le pied de page designbas(); } } else header('location: index.php'); ?>
**Note :** Avant de copier/coller bêtement le code, je précise qu'il y a un bug sur DokuWiki, qui fait disparaître les antishlashes. Il faut donc bien tout vérifier, pour éviter de se retrouver avec des parse errors. En cas de doute, prenez comme modèle le code du minichat de votre installation. Il y a juste quelques commentaires en moins, c'est tout ;-) . ===== Règles pour la création de modules publics ===== Je sais, avoir ces règles est un petit peu pénible, mais nécéssaire pour éviter que l'installation d'un module par un utilisateur de kankanSpace ne se transforme en cauchemar. Voici donc quelques règles à respecter : * Essayez de n'avoir qu'un seul fichier dans la mesure du possible. * Le nom de ce fichier devra ressembler au nom de votre module (évitez les majuscules, les espaces et autres caractères spéciaux). * Essayez de ne pas modifier fondamentalement le code de base. * Remplissez l'array $module avec des valeurs cohérentes. Le préfixe doit-être le nom de fichier sans extension. * Lors de l'installation, pensez bien à ajouter un enregistrement dans la tables **modules**. * Si vous utilisez des tables dans MySQL, utilisez le préfixe de kankanSpace ($prefix), suivi du préfixe de votre module ($module['prefix']), puis éventuellement un nom si vous utilisez plusieurs tables. * Évitez de modifier les tables du kankanSpace "classique". Si cela est vraiment nécéssaire, informez-en vous utilisateurs lors de l'installation et effacez ces modifications lors de la désinstallation du module.