Skyduino:~#
Articles
programmation, web

[SkyPlug] Systéme de plugin en php « made in skywodd »

Salut tout le monde !

J’avais il y a quelque temps le projet de faire un site en php, html, javascript pour remplacer mon blog wordpress.
Avec les études et tout j’ai plus vraiment le temps de m’en occupé, wordpress est une plateforme robuste, bien plus robuste qu’un pauvre site perso en php.
Tout mes articles, média et autre étant maintenant sur les serveurs de wordpress.com la tache de migrer le tout vers un site perso aurait était une tache trop lourde.

Par conséquent je release mon code sous licence GNU GPL, ne vous faite pas d’idées ce n’est pas un projet achevé, débuggé, … c’est un morceau de script qui pourra être utilisé comme base de réflexion pour votre propre systéme mis en aucun cas n’utilisez ce script telle quelle, je n’est prévu aucune sécurités, les failles d’injection sql et d’include n’était pas ma 1er priorité.

Pour télécharger le zip c’est ici :
https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B2_QaX8F73zyM2RkMzc0MjItMTVjNS00OTM1LWI0ODMtYWJjYTM2MDBjYWE4&hl=fr

Petit explication rapide des divers .php :
/index.php -> moteur de plugins (aka SkyPlug), il charge les plugins présent dans /plugins, les configurent et les exécutent (il gère aussi les dépendances entre les divers plugins),
/plugins/WebPageRedirect.php -> plugin principal contenant la fonction « main » exécuté en premier par le systéme de plugin, récupère le $_GET[« action »] et déclenche les trigger associé,
/plugins/ErrorPage.php -> plugin pour afficher les divers page d’erreur, comporte une API pour modifier/ajouter/supprimer dynamiquement les pages d’erreur,
/plugins/HtmlCache.php -> plugin pour crée une version « cache » d’une page html avec un délai avant refresh en seconde,
/plugins/MySqlDB.php -> plugin qui auto connecte la bdd mysql au début de l’exécution du systéme de plugin, puis la ferme à la fin,
/plugins/TemplateEngine.php -> plugin intégrant un systéme de template html minimaliste,
/plugins/WebTheme.php -> plugin embarquant un systéme de widget venant s’ajouter au plugin template, pas vraiment finis et pas vraiment testé.

Principe de fonctionnement du systéme de plugin :
Chaque plugin doit être placé dans le dossier /plugins,
le nom de chaque fichier de plugins doit être choisi intelligemment c’est le nom du fichier qui rend l’exécution du plugin possible.

Le SkyPlug (index.php) inclut chaque .php du dossier /plugins,
chaque plugins doit au moins comporté ceci :

<?php

/*
 * NOM DU PLUGIN - SkyPlug Manager Plugin
 * 
 * DESCRIPTION DU PLUGIN
 * 
 * AUTEUR 
 */

if (!defined("PluginRun"))
    die('Direct access is not allowed !');

function NOMDUFICHIERPHP_info() {
    return array(
        'name' => 'NOM INTERNE DU PLUGIN DOIT ETRE IDENTIQUE AU NOM DU FICHIER SANS LE .PHP',
        'creator' => 'AUTEUR',
        'url' => 'SITE DE L AUTEUR',
        'description' => 'DESCRIPTION',
        'version' => 'VERSION DU BUILD DU PLUGIN',
        "dependency" => null // DEPENDANCE DU PLUGIN (ICI AUCUNE) AUTRE EXEMPLE "dependency" => array("plugin1","plugin2")
    );
}

function NOMDUFICHIERPHP_setup() {
	// ICI DOIT CE TROUVER LES APPELS addTrigger, addEvents & co 
}

?>

lorsque le .php est inclut le SkyPlug appel xxxx_info() avec xxxx qui correspond au nom du fichier .php ainsi il récupère une array avec les divers info du plugin (utile pour la suite).
Ensuite une fois tout les .php inclut et tout les xxx_info() en mémoire le SkyPlug va appeler toute les fonctions xxx_setup() dans lequels devra etre placer les divers appels au API SkyPlug (sans quoi le plugin ne fera rien).

Mon systéme repose sur deux type d’appels, les triggers qui sont de simple lien entre une fonction et un alias :
exemple : add_trigger(« PHP_INFO », « phpinfo »);
des qu’un plugin va faire call_trigger(« PHP_INFO »); alors la fonction phpinfo(); va être appeler.

Ensuite il y a les events qui sont des triggers mais avec plusieurs fonctions de callback :
exemple : add_events(« EVENTS_TEST », « phpinfo »);
add_events(« EVENTS_TEST », « fonctionMachin »);
des qu’un plugin va déclencher l’events EVENT_TEST via call_event(« EVENT_TEST »); les fonctions phpinfo(); puis fonctionMachin(); vont être appelé l’une aprés l’autre.

En gros il y a deux grandes différences, les events sont déclenchés (et il peut y avoir plusieurs actions pour un event) alors que les trigger vont être appelé (et il ne peut y avoir qu’une action par trigger).

Il existe aussi la event_queue qui est une liste d’events déclenché par SkyPlug, le premier event appelé par défaut est « main », d’autre event peuvent être ajouter avant ou aprés « main » via les fonctions de l’API SkyPlug.
Il est aussi possible via l’API SkyPlug de placer un hook sur un trigger ou un event, tester si un event ou un trigger existe ou encore créer un mutex pour empêcher les conflits d’intérêt entre plugins.

Je verrais peut être un jour de reprendre ce projet qui me tient à coeur et qui sera d’ici le 2eme semestre une partie importante de mes cours d’IUT.
En attendant si vous avez des idées, ou que vous trouver un bug, … faite le moi savoir j’en aurait besoin quand je reprendrai le projet.
Ps: Ce systéme de plugin et les quelques plugins qui vont avec ont était codé en 24h donc soyez sympa avec les critiques ;).

PPS: Un jour ou l’autre je serais bien obliger de me trouver soit un serveur ovh ou autre, soit héberger mon blog sur un serveur à la maison (quoi qu’avec ma connexion ce ne serais pas vraiment possible) car je suis bientôt à cours d’espace disque sur wordpress.com …
Repousser l’échéance risque de me réserver de mauvaise surprise, je suis sur d’autres projets perso qui vont me demander d’avoir accées au un serveur dédié, je ne peut rien changer que ce soit le théme ou les plugins du blog, je vais bientôt être à cours d’espace disque, le besoin d’un nom de domaine commence à se faire sentir, les pub sur le blog se multiplie, je ne peut pas stocker de .zip (obliger de faire avec google doc et leur url de partage changeant tout les mois) … si je ne trouve pas de solution avant que tout cela ce produise c’est la mort du blog qui risque de ce montrer au bout du couloir …

Advertisements

Discussion

5 réflexions sur “[SkyPlug] Systéme de plugin en php « made in skywodd »

  1. Ouuwa ! terrible ton système…..
    Si tu veux travailler tranquillement en mode dev, test SVN ou GIT

    Publié par atmoner | 26 janvier 2012, 8 h 28 min
  2. on est d’accord ^^
    bon sinon… j’ai commencer à approfondir ta source, c’est propre !
    Bien spécifique à ton système de blog mais completement malléable.
    Encore merci pour ta source… je te ferais signe si j’arrive à en faire quelques chose 😉

    Publié par atmoner | 26 janvier 2012, 14 h 45 min
    • Pas de quoi 😉
      C’est vrai que c’est très axé « cms/blog » mais normalement ça doit pouvoir s’adapter pour n’importe quelle systéme.

      J’attends de voir ce que tu en fera avec impatience 🙂

      Publié par skywodd | 26 janvier 2012, 17 h 23 min
  3. J’ai une question bête à te poser.
    A quoi sert-il de mettre un hook ici?

    Publié par Mikilo | 21 décembre 2012, 13 h 10 min

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.