News

2016/12/19 Nouveau tutoriel sur Docker

Deux nouveaux tutoriels vous permettront de mettre facilement en place une solution docker pour simplifier vos developpements.
Rendez-vous sur la page tutoriaux , rubrique Docker
- Créer une image docker pour le mkframework
- Créer une application en utilisant cette image


2016/11/03 Mise à jour du module GoogleMap

Pour information, google a modifié son api il y a quelques temps, il faut désormais fournir une clé à votre module pour fonctionner.
Le module googleMap a été mis à jour en conséquence, ainsi que la documentation associée

Pour rappel, vous avez deux méthodes pour récuperer un module: via le site web , ou via le market

Voici la nouvelle méthode de définition de la clé googleMap

  
$oModuleGoogleMap
=new module_googleMap();
$oModuleGoogleMap->setKey('VOTRECLEGOOGLEMAP');
    



2016/10/28 Mise a jour de la navigation du builder + quelques correctifs

A partir de la version v4.128.0, vous aurez le plaisir de voir une navigation avec "fil d'ariane" afin d'éviter de surcharger l'affichage comme c'etait le cas avant.
Il y a eu également quelques corrections pour rendre le framework compatible avec php7 ainsi que quelques bugfix

Pour rappel, le changelog complet est toujours disponible ici

2016/10/08 Migration du module Crud Multi pour les projets bootstrap

Vous pouvez désormais générer des modules CRUD multi ligne pour vos projets Bootsrap (version >= 4.126.2)

2016/05/12 Ajout d'une verification sur le market

Certains utilisateurs ont rencontré un problème: ils ne peuvent pas accéder au market ou mettre à jour leur modules
Cela vient d'un paramètre du php.ini allow_url_fopen qui n'autorise pas sur certaines configuration à accéder à une adresse web.
Un code a donc été ajouté, vérifiant ce paramétrage pour en informer l'utilisateur.

Pour les tests unitaires, des tutoriaux ont été ajoutés dans la page "tutoriaux"

2016/04/16 Ajout module test unitaire sur le builder

Les tests unitaires sont souvent omis pour des raisons de difficulté/ temps à mettre en place.
Pour aider dans cette démarche de qualité, un nouvelle version est en ligne proposant un nouveau module de "test unitaires"
Je n'avais pas la possibilité ici simplement d'ajouter ce module dans le market (ce module necessitant quelques fichiers/fonctions en plus dans la gestion des modules, vous devrez alors telecharger la nouvelle version du framework.)
Version supérieur ou égal à v4.125.0

Des tutoriaux écrits et vidéos suivront pour bien expliquer ce nouveau module et l'utilisation de phpUnit pour tester vos applications existantes.

2016/01/14 Plugin debug: nouvelle fonctionnalité

Il arrive à certain moment que l'on veuille espionner une variable mais qu'a cause d'une redirection on ne puisse l'afficher dans la barre de debug.
Vous pouvez désormais via la méthode

  
plugin_debug
::addSessionSpy('label',$oVar);
    



Par exemple pour un formulaire d'édition d'un auteur

  
public function _edit(){
       $tMessage=$this->processSave();

       $oAuteur=model_auteur::getInstance()->findById_root::getParam('id') );

       $oView=new _view('auteur::edit');
       $oView->oAuteur=$oAuteur;
       $oView->tId=model_auteur::getInstance()->getIdTab();



       $oPluginXsrf=new plugin_xsrf();
       $oView->token=$oPluginXsrf->getToken();
       $oView->tMessage=$tMessage;

       $this->oLayout->add('main',$oView);
}
    


On appelle processSave() pour enregistrer le formulaire
On souhaite vérifier que l'on est passé par là:

  

private function processSave(){
       if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
           return null;
       }

       $oPluginXsrf=new plugin_xsrf();
       if(!$oPluginXsrf->checkToken_root::getParam('token') ) ){ //on verifie que le token est valide
           return array('token'=>$oPluginXsrf->getMessage() );
       }

       $iId=_root::getParam('id',null);
       if($iId==null){
           $oAuteur=new row_auteur;
       }else{
           $oAuteur=model_auteur::getInstance()->findById_root::getParam('id',null) );
       }

       $tColumn=array('nom','prenom');
       foreach($tColumn as $sColumn){
           $oAuteur->$sColumn=_root::getParam($sColumn,null) ;
       }


       if($oAuteur->save()){
           //une fois enregistre on redirige (vers la page liste)

           //on ajoute un espion sur cette variable
           plugin_debug::addSessionSpy('auteur',$oAuteur);

           _root::redirect('auteur::list');
       }else{
           return $oAuteur->getListError();
       }

}
    







2015/11/29 Nouveau tutoriel pour le market

Un nouveau tutoriel permettant d' écrire et soumettre un plugin au market

2015/11/25 Market Application disponible

La phase 2 du market est engagée, vous avez désormais un market permettant d'ajouter modules et plugins à votre application
Plus besoin de passer par le site web pour télécharger le zip puis déplacer certains sous répertoire
Désormais, à partir du builder, en quelques clics installer un module GoogleMap, Guriddo...

Des tutoriaux suivront pour vous indiquer comment développer et soumettre vos propres modules/plugins

2015/11/07 Tutoriel de création d'une extension (market)

Trois nouveaux tutoriels vous permettent désormais d'écrire et soumettre des extensions pour le market ;)
Comment créer une extension de builder
Comment développer votre extension de builder
Comment Soumettre une extension au market

Bien sur d'autres tutoriels suivront pour bien expliquer comment créer simplement des extensions.

2015/11/04 Mise à jour du market

On peut désormais installer des extensions via le Market.
La phase deux est lancé (2/3) vous allez pouvoir proposer et/ou installer de nouvelles extensions sur le builder sans devoir passer par le site pour récupérer le dernier zip ;)

Viendrons dans les prochains jours tutoriel et procédure pour proposer vos propres extensions de génération ;)
Vous verrez c'est très simple à écrire

Pour la phases suivante, il manque le market pour vos applications qui permettra d'installer de nouveau modules comme googleMap,phpExcel,Guriddo... sur vos application en quelques clics (plus besoin de passer par le site) ;)
Cette nouvelle extension arrivera via ce nouveau market :)



2015/10/26 Grosse mise à jour du builder

Une nouvelle version du framework qui marque un tournant dans son histoire: l'arrivée d'un Market ;)
Au menu de cette importante mise à jour:
- nouveau builder multi-lingue
- refactorisation/industrialisation des modules de générations qui deviennent des extensions
- l'arrivé du market lot 0, qui ne gère que les mises à jour des extensions

Les prochains jours permettront de corriger d'eventuels bugs sur ce gros chantier de refactorisation/traduction

Ensuite viendront les étapes logiques suivantes:
Market builder:
- mise à jour du market pour permettre d'ajouter de nouvelles extensions
- écriture de la procédure pour que VOUS puissiez soumettre de nouvelles extensions

Market application:
- arrivée d'un market sur les applications pour ajouter modules, plugins...
- gestion mise à jour modules/plugins existants


2015/10/14 Mise à jour gestion authentification

Vous pouvez désormais mettre tout votre site sous authentification (variable auth.enabled dans conf/site.ini.php) ET exclure une liste de module de cette authentification.
Pour cela, avec la nouvelle version (>= v4_118_0_r287), ajoutez dans votre fichier conf/site.ini.php

  
[auth]
(...)
;
liste des modules non concerne par l'auth: separe par des virgules
module.disabled.list=moduleAexclure,autreModuleAexclure
   


Le besoin peut etre d'avoir une partie du site "public" et une partie "privée"

2015/10/13 Nouvelle page roadmap

Une nouvelle page "roadmap" a fait son apparition sur le site, elle permet de communiquer sur les developpements en cours et à venir.

2015/09/20 Nouveau module PHPExcel

Plusieurs personnes ont déjà demandé comment utiliser cette puissante librairie avec ce framework.
Vous avez désormais deux façons de le faire,
1. en suivant ce tutoriel
2. en téléchargeant le nouveau module PhpExcel

2015/09/08 Builder: ajout de la génération de CRUD multi-ligne

Nouvel ajout: possibilité de faire un CRUD multi-ligne
Vous avez ainsi un tableau de plusieurs enregistrements modifiable en une fois.
Des tutoriaux suivront prochainement.

2015/09/07 Builder: ajout de la génération d'ACL multi-groupes

Vous pouvez désormais générer une gestion d'ACL multi-groupes via le builder en quelques clics.

PS: il y aura désormais les dates de publication sur les liens de téléchargements du framework.

2015/08/28 Builder: correction d'un bug sur la génération Guriddo

Certains utilisateurs m'ont remonté des problèmes avec la nouvelle fonctionnalité sur d'autres SGBDs que mysql.
J'ai corrigé le builder en conséquence.
Vous devez télécharger la dernière version du module qui a également été mis à jour en conséquence.

J'en ai profité pour ajouter une rubrique "Actualités" dans la page de téléchargement de module.

2015/08/22 Builder: ajout d'un menu pour générer un CRUD avec Guriddo

Vous avez désormais la possibilité de générer un tableau CRUD appuyé sur la librairie Guriddo
Une nouvelle entrée a été ajoutée sur la page de tutorial: ici


2015/08/07 Ajout d'un driver mongoDb

Mongodb est une base noSQL, il est désormais possible sur le framework de s'y connecter.
Pour information, contrairement aux autres SGBD, il y a quelques différences dans le classe modèle mongodb
1. en noSQL on n'utilise pas de requete SQL
2. chaque collection (équivalent des tables en SQL) possède par défaut une clé primaire "_id"
3. n'ayant pas de structure fixe, dans le builder, vous devez indiquer les champ à créer dans votre CRUD (via l'interface)

Comme d'habitude, le builder vous facilite le travail en vous générant vos classe modèle

Voici un exemple de connexion mongodb

  
mongodb
.dsn="mongodb://monuser:pass@localhost:27017/mabase"
mongodb.sgbd=mongodb
mongodb
.database=mabase
   



Et voici un exemple de couche modèle mongodb

  
<?php
class model_article extends abstract_model{

   protected $sClassRow='row_article';

   protected $sTable='article';
   protected $sConfig='mongodb';

   protected $tId=array('_id');

   public static function getInstance(){
       return self::_getInstance(__CLASS__);
   }

   public function findById($uId){
       return $this->findOne($this->sTable,array('_id' => new MongoId($uId)) );
   }
   public function findAll(){
       return $this->findMany($this->sTable);
   }

}
    



Vous noterez une différence dans la manière de requeter: ici au lieu de faire une requete SQL de select type:

  
return $this->findMany('SELECT * FROM '.$this->sTable);
    


on fait plutôt:

  
return $this->findMany($this->sTable);
    



Et pour une recherche avec critère on passe un tableau
Au lieu de

  
return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE id=?',$id);
    


on fait:

  
return $this->findOne($this->sTable,array('_id' => new MongoId($uId)) );
    


Note: pour l'id seulement il faut passer en paramètre un objet MongoId, mais c'est uniquement pour l'id.
Mais pour les autres paramètres, par exemple lister les articles d'une catégorie:
Au lieu de

  
return $this->findMany('SELECT * FROM '.$this->sTable.' WHERE category=?',$category);
    


on fait:

  
return $this->findMany($this->sTable,array('category' => $category) );
    




2015/06/15 Ajout d'un driver oracle "natif"

Un nouveau driver oracle est désormais disponible, n'utilisant pas pdo.
Il utilise les fonctions natives php oci_connect /oci_execute...
Pour l'utiliser, dans votre fichier de configuration:

  
oracleExple
.sgbd=oracle
oracleExple
.username=username
oracleExple
.password=pass
oracleExple
.database=myOracleDb
   



2015/06/15 Ajout d'un driver "virtuel"

On peut désormais ajouter un modèle virtuel, permettant de requeter fichiers/sgbd... afin de constituer un tableau php requetable/paginable et triable via des requête SQL

Pour l'utiliser, vous pouvez creer une classe modèle héritant de "abstract_modelVirtual"

Un tutoriel est disponible ici

2015/06/12 Le module Guriddo s'améliore

On peut désormais gérer une customisation "à la volée" du contenu ou des attibuts d'une cellule en fonction du contexte


La documentation et la page de téléchargement du module Guriddo

2015/06/01 On continue la traduction du builder

Si vous avez téléchargé la version 111.0 je vous invite à télécharger la suivante: il manquait les fichiers de traduction correspondant.

2015/05/31 Debut du chantier builder multi-lingue

Suite à de nombreuses demandes, j'entreprend le mode multi-lingue du builder
Vous pouvez à partir de la verion 111.0 (révision svn 275) passer le builder en anglais, en modifiant le fichier conf/site.ini.php
Modifiez la vaiable "default", en= anglais, fr=français

  
[language]
;
fr en... //sLangue
default=en
allow
=fr,en
   



2015/05/04 Nouvelle publication dans le magazine PROGRAMMEZ!

Un nouvel article vient d'être publié dans le numéro 185 du magazine, présent ici

2015/04/20 Mise à jour Builder bootstrap

Vous pouvez désormais générer des module CRUD embedded avec le builder Bootstrap, les templates ont été migrés.
Pour le plugin form, une correction a été appliquée concernant les champs disabled
Par défaut: on affiche dans le champ du formulaire la propriété de l'objet, celle-ci est écrasée par la valeur du POST en cas de soumission de celui-ci.
Mais dans le cas d'un champ disabled, sa valeur n'est pas transmise, et l'on se retrouvait avec un champ vide. C'est désormais corrigé, on écrase uniquement avec les valeurs soumises.

2015/04/08 Mise à jour de plugin_valid

Une mise à jour de la documentation vous explique comment ajouter une vérification ponctuelle ici
Pour permettre ceci, le plugin plugin_valid a été légèrement modifié: sa méthode ko() est passée publique.
Pour eviter de télécharger tout le framework, vous pouvez vous rendre dans la rubrique de téléchargement pour récupérer la dernière version du plugin

2015/02/26 Mise à jour du module Guriddo

Quelques amélioration du module Guriddo, je vous invite à visiter la page en question pour voir les mises à jour
La page sur le module Guriddo

2015/02/16 Nouveau module: Guriddo

Un nouveau module est disponible dans la rubrique téléchargement de modules: Guriddo



Cette librairie s'appuie sur jQuery et permet d'afficher des tableaux très pratique: on peut simplement
- trier,
- redimensionner les colonnes
- et filtrer
Voici le lien pour la télécharger et l'installer: le module Guriddo

2014/12/02 Amélioration du framework: ranger vos modules

Suite à une idée d'un utilisateur (merci oliverell62).
L'idée est simple: pour une application un peu complexe on se retrouve rapidement avec une multitude de modules dans le répertoire du même nom.
Ici, vous pouvez désormais ordonner ceux-ci dans des répertoires.
Avant:

Après


Deux choses:
1. Pour indiquer le sous répertoire, on utiliser le caractère "_" (underscore).
Le module privé: module_private_article (module/private/article/)

  
class module_private_article extends abstract_module{
    


2. Pour récupérer la vue adequate list.php (module/private/article/view/list.php)

  
$oView 
= new _view('private/article::list');
    



Pour information, pour éviter toute regression sur les applications existantes, on externalise le chargeur de classes dans un plugin. Seul les nouvelles applications en bénéficie.

Mais vous pouvez, après avoir mis à jour le framework sur votre plateforme, en bénéficier en téléchargeant le nouveau fichier de plugin autoload ici
ET en désactivant le chargeur d'origine en mettant en commentaire la ligne suivante dans le fichier public/index.php

  
spl_autoload_register
(array('_root','autoload'));
    



2014/10/11 Amélioration du builder: couche modèle

Le builder vous permet désormais, au moment de la génération de la couche modèle, d'ajouter des contraintes.

Vous pouvez ajouter des contraintes par champ et indiquer le message d'erreur.



2014/09/29 Framework amélioration de la sécurité

Modification de la partie authentification: amélioration de la sécurité pour éviter qu'un tiers se connecte en volant le cookie de session.

2014/09/27 Builder: nouvelle page d'ajout de droits

Le builder gagne une nouvelle fonctionnalité: ils vous facilite l'ajout de la gestion de droits.

Qui propose de vous guider dans la génération des tables nécessaires

et vous générera un module pour enregistrer les permissions,renseigner le profil des utilisateurs et vous affichera le code à ajouter pour prendre en compte cette gestion de droits.


Pour rappel, le code pour vérifier un droit:

  
if(_root::getACL()->can('action','element')){
//code
}
    



Un tutoriel écrit ainsi qu'une vidéo suivront prochainement.

2014/09/21 Nouveau tutoriel pour l'utilisation de la barre de debug

Nouveau tutoriel pour expliquer le fonctionnement de la barre de debug
La documentation API a également été mise à jour pour prendre en compte ce plugin.

2014/09/16 Amélioration de la gestion d'erreur

Pour améliorer l'affichage des erreurs, une nouvelle variable fait son apparition.

  
[debug]
class=
plugin_debugError
   


La variable "class" indique le nom d'un nouveau plugin permettant d'afficher plus de détail sur les erreurs.
On a désormais le nom du fichier, mais également l'affichage du code source avec une mise en évidence sur la ligne en question.

Pour vos applications existantes:
- mettre le framework à jour
- insérer le bloc précédement cité dans votre fichier conf/site.ini.php
- télécharger le plugin plugin_debugError, disponible sur la page des plugins
- copier ce plugin dans le répertoire plugin de votre projet

2014/09/06 Nouveau driver SGBD : firebird

Un nouveau driver permettant désormais de se connecter à une base firebird (via pdo)
Exemple de connexion firebird (dans votre fichier de configuration conf/connexion.ini.php)

  
firebirdExple
.dsn="firebird:host=localhost;dbname=/var/www/firebirdDb"
firebirdExple.sgbd=pdo_firebird
firebirdExple
.username=root
firebirdExple
.password=root
   



2014/09/06 Builder: amélioration de la création de module d'authentification

Le module a été un peu simplifié sur la partie concernant les méthodes à copier dans votre classe modèle.
Le screencast correspondant a été enregistré de nouveau, visible ici .

2014/09/02 Information driver ORM via PDO

Vous pouvez utilisez les placeholders avec vos requêtes préparés:
Vous pouvez aussi bien écrire :

  
$this
->findMany('SELECT FROM article WHERE id=?',12);
    


Que

  
$this
->findMany('SELECT FROM article WHERE id=:id',array('id'=>12) );
    


La documentation de l'ORM a été mise à jour en conséquence

2014/08/19 Amélioration des logs en mode "production"

Lorsque vous passez votre application en mode production, le framework cache les messages d'erreurs.
Vous pouvez à present décider d'écrire ces messages d'erreur dans un fichier de log (dans data/log/) ou intégrer ces messages dans le fichier de log d'apache.
Pour cela, deux nouvelles variables font leur apparition dans le fichier de configuration conf/site.ini.php

  
[log]
(...)
file.enabled=1
apache
.enabled=1
   


PS: pour rappel, vous pouvez changer le mode de votre application dans le fichier conf/mode.ini.php

2014/07/24 Automatisation de formatage à l'affichage et l'enregistrement

Suite à une question d'un utilsateur (NhyMbuS), j'ai ajouté dans la FAQ un paragraphe pour indiquer comment automatiser un traitement sur les row.
Le cas est simple:
- Vous recevez une date dans un format et souhaitez afficher dans un autre sur vos pages.
- Vous utiliser un datePicker et souhaitez reformater la date avant d'enregistrer.
- Vous souhaitez formater la date en fonction de la langue du site.

La FAQ est ici.

2014/07/15 Correction suite dernière livraison

Une correction suite à la dernière livraison pour plus de souplesse:
La fonction php array_merge_recursive créé un tableau si la valeur de configuration est déjà définie
Hors il est plus pratique/souple d'écraser cette valeur:
ainsi vous pouvez avoir vos fichiers de configuration de votre application et écraser certaines valeurs en ajoutant un fichier de configuration supplémentaire (par exemple en production)

2014/07/12 Corrections, optimisation + nouvelle fonctionnalité

Dans cette livraison, plusieurs corrections font suite à la dernière analyse sonar
Une nouvelle fonctionnalité vous permet de generer un fichier de cache de vos fichiers de configurations.
Pour cela, il vous faut:
- un fichier de configuration path.ini.php afin de charger notamment le repertoire contenant le cache
- ajouter les lignes suivante dans votre fichier index.php:

  
$oRoot
=new _root();
//enregistre les chemins des repertoires dans la configuration (necessaire pour la mise en cache)
$oRoot->setConfigVar('path',$tIni['path']);

//decommenter pour activer le cache de fichier de configuration
//$oRoot->setConfigVar('cache.conf.enabled',1);
    



2014/07/12 Corrections, optimisations, fragmentation

Plusieurs choses dans cette livraison:
- correction d'un bug sur la gestion de la date de peremption du cache des pages.
- correction d'un bug sur la gestion du cache du fichier autoload (generant un tableau php de l'ensemble des classes)
- simplification du processus de chargement d'un module via l'ajout des methodes before() et after() au sein de la classes abstraite (ainsi plus besoin de verifier avant de lancer before() et after() de chaque module)
- separation du fichier site.ini en deux: site.ini et path.ini afin d'alleger le fichier index.php qui doit precharger la configuration pour charger le framework.

2014/07/07 Builder: allegement du code généré des modules CRUDs

Utilisation du plugin plugin_form pour les CRUDs
Coté controlleur on a plus besoin de la méthode fillRow() qui permettait de remplir l'objet avec les valeurs soumises dans le formulaire (pour ne pas perdre sa saisie)
Cette fonctionnalité est gérée par le plugin plugin_form.

Coté vue, on passe de ce code:

  
<?php $oPluginHtml=new plugin_html?>
<form action="" method="POST" >
<table class="tb_edit">
   <tr>
       <th>titre</th>
       <td><input name="titre" value="<?php echo $this->oArticle->titre ?>" /><?php if($this->tMessage and isset($this->tMessage['titre'])): echo implode(',',$this->tMessage['titre']); endif;?></td>
   </tr>
   <tr>
       <th>resume</th>
       <td><input name="resume" value="<?php echo $this->oArticle->resume ?>" /><?php if($this->tMessage and isset($this->tMessage['resume'])): echo implode(',',$this->tMessage['resume']); endif;?></td>
   </tr>
   <tr>
       <th></th>
       <td>
           <p>
               <input type="submit" value="Modifier" /> <a href="<?php echo $this->getLink('article::list')?>">Annuler</a>
           </p>
       </td>
   </tr>
</table>
<input type="hidden" name="token" value="<?php echo $this->token?>" />
<?php if($this->tMessage and isset($this->tMessage['token'])): echo $this->tMessage['token']; endif;?>

</form>
   

Au code suivant:

  
<?php
$oForm
=new plugin_form($this->oAuteur);
$oForm->setMessage($this->tMessage);
?>
<form action="" method="POST" >
<table class="tb_edit">
   <tr>
       <th>nom</th>
       <td><?php echo $oForm->getInputText('nom')?></td>
   </tr>
   <tr>
       <th>prenom</th>
       <td><?php echo $oForm->getInputText('prenom')?></td>
   </tr>
   <tr>
       <th></th>
       <td>
           <p>
               <input type="submit" value="Modifier" /> <a href="<?php echo $this->getLink('auteur::list')?>">Annuler</a>
           </p>
       </td>
   </tr>
</table>

<?php echo $oForm->getToken('token',$this->token)?>

</form>
   

En effet, la partie permettant d'afficher les messages d'erreurs est également géré par le plugin plugin_form.

2014/07/03 Pdo + Layout par défaut

Coté Pdo:
On peut désormais définir les paramètres ATTR_ERRMODE et ATTR_CASE

  
[pdo]
;
Plus d'informations ici: http://www.php.net//manual/fr/pdo.setattribute.php
;SILENT,WARNING,EXCEPTION
ATTR_ERRMODE=WARNING
;LOWER,NATURAL,UPPER
ATTR_CASE=NATURAL
   



Coté projets source du builder
- ajout des charset/encoding des différents layout
- changement par défaut doctype html: xhtml1 > html4 transitionnal

2014/06/30 (ORM) Ajout des methodes isset() et unset() sur les classes row

Vous pouvez désormais verifier l'existance d'une propriété d'objet avec isset()

  
$oArticle
=model_Article::getInstance()->findById(2);
if(isset(
$oArticle->titre)){
   echo $oArticle->titre;
}
    



2014/06/25 Ajout de plugins facilitant l'export XML

Vous pouvez désormais facilement convertir vos objets en xml pour les afficher ou les enregistrer dans des fichiers
Pour afficher un enregistrement en xml:

  
public function _showXml(){

   $oAuteur=model_auteur::getInstance()->findById(_root::getParam('id'));

   $oXml=new plugin_xmlObject($oAuteur);
   $oXml->setListColumn(array('id','nom','prenom'));
   $oXml->show();
}

    


Pour afficher une liste/tableau d'objet en xml:

  
public function _listXml(){

   $tAuteur=model_auteur::getInstance()->findAll();

   $oXml=new plugin_xmlListObject($tAuteur);
   $oXml->setListColumn(array('id','nom','prenom'));
   $oXml->show();
}
    



Et pour enregistrer dans un fichier, utilisez la méthode build() plutot que show():

  
public function _saveXml(){
   $tAuteur=model_auteur::getInstance()->findAll();

   $oXml=new plugin_xmlListObject($tAuteur);
   $oXml->setListColumn(array('id','nom','prenom'));
   $sXml=$oXml->build();

   $oFile=new _file('../data/auteurs.xml');
   $oFile->setContent($sXml);
   $oFile->save();
}
    



2014/06/03 Ajout du framework sur packagist.org

Vous pouvez désormais installer le framework via composer, en effet le repository github du framework est désormais lié sur packagist.org , le gestionnaire de dépot de composer.
Plus d'information sur composer ici: getcomposer.org

2014/06/01 Ajout d'une fonctionnalité pour les bases mysql

Mysql propose lors d'une insertion d'effectuer un update si il detecte une clé dupliqué, cette fonctionnalité s'appelle "ON DUPLICATE KEY"
Via le builder, vous pouvez désormais, lors de la génération de la couche modèle activer l'utilisation de cette fonctionnalitée

2014/06/01 Ajout d'une page Slides

Ajout d'une page Slides vous proposant une autre façon d'expliquer le fonctionnement du framework via des diaporamas.

2014/05/29 Mise à jour du builder: génération des CRUD

Une petite mise à jour graphique de la génération des CRUD, CRUD embedded et CRUD bootstrap

2014/05/08 Publication d'un tutoriel sur developpez.com

Un nouvel article publié sur developpez.com permettant de faire une application full cache

2014/05/08 Mise à jour du builder: possibilité d'exporter un projet

De base, vos projets sont générés dans le répertoire data/genere du framework, le moment où vous devez le livrer en test ou en production, il vous faut le copier sur un serveur ainsi que la librairie du framework.
Jusqu'à maintenant vous deviez alors suivre la procédure disponible ici: dans la FAQ

Aujourd'hui vous avez un nouveau bouton de menu vous simplifiant cette partie en vous proposant deux choix:
1. copier votre projet et modifier le chemin d'accès à la librairie du framework
2. copier votre projet et la librairie du framework au sein de votre projet (et modifier le chemin de la librairie en conséquence)



2014/04/26 Sécurisation de la méthode _root::getLinkWithCurrent

Une correction de sécurité de la méthode _root::getLinkWithCurrent qui permet de récupérer les paramètres déjà présent dans l'URL. Par exemple pour des liens de changements de langue où l'on souhaite rester sur la page actuelle.

2014/04/02 Ajout d'un plugin pour gérér facilement des classes métiers

Il peut vous arriver d'avoir des routines, logique métiers transverses, pour cela, vous avez désormais la possibilité d'ajouter vos propres classes dans une arborescence à part.
Pour cela, pour vos applications existantes, téléchargez la classe plugin_autoload sur cette page
et ajoutez dans votre fichier public/index.php

  
//enregistrement de votre autoloader personnel
include($tIni['path']['plugin'].'/plugin_autoload.php');
spl_autoload_register(array('plugin_autoload','autoload'));
    



Pour l'utiliser écrivez simplement:

  
$oMetier
= new my_metier;
//le plugin autoload va chercher le fichier myClasses/metier.php
    



Par défaut, dans la classe autoload fournie, on charge les fichiers débutant par "my_" dans le répertiore myClasses, mais vous pouvez modifier celle-ci à votre gré

2014/03/28 Publication dans le numéro 173 du magazine PROGRAMMEZ!

Parution d'un nouveau tutoriel dans le numéro 173 du magazine papier PROGRAMMEZ!
Lien vers le numéro


2014/03/27 Ajout de Bootstrap

Vous pouvez désormais créer une application bootstrap avec le builder: créer des modules CRUD, menu et module d'authentification utilisant ce framework.

2014/03/25 Ajout d'un nouveau type de tableau: tri/pagination en ajax

Le module table est mis à jour, avec son nouveau type complex5, il permet d'afficher un tableau dont la pagination et le tri se font en ajax
Plus d'informations sur la page dédiée: telechargerModule_table.html

2014/03/12 Correction du plugin debug

Petite correction sur le plugin_debug suite à l'ajout des permissions, vous pouvez téléchager la dernière version corrigée sur la page télécharger

2014/03/10 Amelioration de l'affichage des permissions

Il est parfois difficile de mettre en place une gestion de droits, une amelioration du plugin de gestion de droits ainsi que le plugin de debug vont vous faciliter celle-ci.
En effet vous allez avoir sur votre barre de debug un bouton supplémentaire "permissions" qui affichera un tableau listant les permissions vérifiées sur la page.


Vous pouvez ainsi voir des lignes en rouge quand non autorisé

Et en en vert quand autorisé


Pour être précis, il y a une ligne à chaque fois que vous allez appeler la vérification de droit via

  
_root
::getACL()->can('action','composant')
    



note: pour bénéficier de cette mise à jour, télécharger les dernières versions des plugins plugin_gestionuser et plugin_debug dans la page télécharger

2014/03/09 Ajout d'un nouveau module téléchargeable de tableau

Il nous arrive souvent de faire des tableaux dans nos applications.
L'idée ici est de capitaliser, d'éviter de ce repetter, on appelle ceci DRY: don't repeat yourself.
Vous pouvez désormais télécharger sur le site un nouveau module intégrable "Table"
Ce module permet de centraliser les types de tableau de votre site, n'hésitez pas à le personnaliser selon vos besoins pour le réutiliser.
Plus d'informations sur la page du module table
Quelques exemples de rendu:



2014/03/03 Nouvelles améliorations sur le plugin_chart

Ajout d'un nouveau type de graphique: le graphique bar
Amélioration des graphiques existants
La page d'utilisation a été mise à jour en conséquence: page FAQ

2014/02/23 Amélioration plugin plugin_chart

Plusieurs modifications pour améliorer ce plugin:
- possibilité d'ajout de repères
- possibilité d'indique les min/max des axes x et y
- possibilité de définir une marge gauche pour le graphique


2014/02/22 Nouveau plugin plugin_rss

Dans le cadre d'un nouveau projet disponible sur github: mkdraw
J'avais besoin de mettre en place un webservice
J'ai créé un nouveau plugin plugin_rss pour l'occasion, dispnobile ici

2014/01/30 Nouvelle méthode getOutput() pour la classe _layout

Vous pouvez désormais créer une page complète et l'enregistrer facilement.
Un tutoriel, à cette adresse explique comment créer un cache complet de site en utilisant cette méthode:
Faire un site avec un cache html complet
Les avantages:
- une base de donnée peu solicitée: juste à la génération de cache et lors de la modification de données
- de très bonnes performances, le serveur apache (ou autre) ne faisant que retourner de simples pages html
- coté sécurité: aucune faille xss,xsrf, nullbyte, sql injection ou autre: le client n'a accès qu'à des pages html

2014/01/27 Nouveau plugin plugin_form

Afin de rendre plus confortable la création de formulaire, un nouveau plugin fait son apparition: plugin_form
Il permet de créer des éléments de formulaire en se prenant en compte l'objet modifié
Par exemple, pour l'édition d'un article
Coté vue:

  
<?php
$oForm
=new plugin_form($this->oArticle);
$oForm->setMessage($this->tMessage);
?>
<table>
   <tr>
       <th>Titre</th>
       <td><?php echo $oForm->getInputText('titre');?></td>
   </tr>
   <tr>
       <th>Resume</th>
       <td><?php echo $oForm->getInputText('resume');?></td>
   </tr>
</table>
   

Qui correspond à

  
<p>Titre <input type="text" name="titre" value="<?php echo $this->oArticle->titre?>" /></p>
<
table>
   <tr>
       <th>Titre</th>
       <td>
           <input type="text" name="titre" value="<?php echo $this->oArticle->titre?>" />
           <?php if($this->tMessage['titre])):?>
               <p class="error">
                   <?php echo implode('
,',$this->tMessage['titre']; ?>
               </p>
           <?php endif;?>
       </td>
   </tr>
   <tr>
       <th>Resume</th>
       <td>
           <input type="text" name="resume" value="<?php echo $this->oArticle->resume?>" />
           <?php if($this->tMessage['
resume])):?>
               <p class="error">
                   <?php echo implode(',',$this->tMessage['resume']; ?>
               </p>
           <?php endif;?>
       </td>
   </tr>
</table>
   


2014/01/26 Mise à jour du module google map

Une nouvelle méthode permet d'ajouter des pointers cliquables qui ouvre des fenêtre d'information.
Plus d'information ici: telechargerModule_googleMap.html

2014/01/26 Amélioration sécurité plugin upload + génération CRUD

Le plugin upload enregistre désormais les fichiers sous forme de hash, cela permet d'éviter un utilisateur de retrouver des fichiers uploadés par bruteforce
Concernant la génération de CRUD, un tableau des colonnes attendus permet d'éviter que l'utilisateur soumette des champs non attendu.
Merci à Lo000oL pour cette suggestion.

2014/01/02 Ajout d'un nouveau module: google Map

Vous pouvez désormais télécharger un nouveau module embarqué vous permettant de facilement ajouté une carte Google map dans vos sites.
Vous pouvez télécharger le module ici: Module Google Map

2013/12/27 Ajout d'une méthode pour créer un lien avec le contexte actuel

Dans le cas où par exemple vous avez des liens permettant juste de changer de langue
Vous pouvez utiliser cette nouvelle méthode _root::getLinkWithCurren()

  
<a href="<?php echo _root::getLinkWithCurrent(array('langue'=>'fr') )?>">FR</a>
<
a href="<?php echo _root::getLinkWithCurrent(array('langue'=>'en') )?>">EN</a>
    



2013/12/15 Ajout d'un plugin pour faire des graphiques en html5

A l'occasion un nouveau template (layout) html5 fait son apparition pour permettre d'utiliser ce nouveau plugin*
Il permet pour l'instant de génerer des histogrammes, camembert et lignes.
Le projet avec exemple (générable via le builder) compte une page en plus utilisant ce plugin.
Sa documentation doxygen a été ajoutée ici

*note: ce plugin utilise la balise canvas html5

2013/12/10 Correction de la méthode getParams() de la classe request

Cette méthode qui retourne le tableau complet des paramètres ne protégeait pas le du XSS (contrairement à getParam() )

2013/12/06 Ajout d'une page de recherche

Vous pouvez désormais chercher dans la documentation via une nouvelle page recherche. (tout en bas dans le menu de gauche)

2013/12/03 Amélioration graphique du builder + futur application Android

Petite amélioration graphique du builder sur la partie génération d'index pour les bases xml et json.
J'en profite également pour vous informer travailler sur une petite application Android permettant d'avoir dans vos smartphone la documentation du framework (sans être connecté)

2013/11/10 Amélioration de la génération de CRUD

Désormais, si vous avez une erreur à la validation d'un formulaire, vous retrouvez vos données saisies.

2013/11/01 Nouveau sgbd: json

Un nouveau moteur vient s'ajouter au xml et csv: json
Vous pouvez désormais créer une base json et, comme pour une base xml, ajouter des index quand nécéssaire.

2013/10/31 Publication d'un tutoriel pour créer son site de microblogging sur developpez.com

Retrouvez sur developpez ce tutoriel: http://imikado.developpez.com/tutoriels/php/creer-votre-microblogging/

2013/10/30 Dernières news

Au menu:
- on peut désormais dans le builder choisir de générer un module CRUD avec/sans pagination.
- une nouvelle partie de la page de téléchargement permet désormais de télécharger des modules.
- Deux nouveaux projets sont disponibles dans la rubrique "Projets & Applications": un projet de reseau social, et un projet de microblogging
Pour information, vous pourrez retrouver dès demain sur developpez.com un tutoriel pour faire ce site de microblogging en moins d'une heure.

2013/10/19 Tutoriel sur le réseau social fini

Le tutoriel permettant de créer un réseau social est désormais fini et disponible ici .
Ce projet est également disponible sur la page de Projets & Applications

2013/10/14 Ajout d'une nouvelle rubrique "Projets & Applications"

Depuis de longs mois, je travaille sur des projets, et ceux-ci étant basés sur ce framework, je vous les propose en téléchargement
Pour le moment il y a MkNotes et MkSql
MkNotes est une application de gestion de taches.
MkSql est une application d'écriture de requete SQL en mode graphique utilisant les drivers du framework.
note: ces projets sont et seront ajoutés chacun sur github sous licence LGPLv3

2013/10/10 Amélioration du log SQL

Vous avez désormais dans vos logs d'information les requetes SQL éxécutées.
Pour rappel, pour activer ce log, il vous suffit de passer la variable information à 1 dans la section [log]

  
[log]
class=
plugin_log
error
=0
warning
=0
application
=0
information
=1
   



2013/10/09 Amélioration du plugin plugin_debug

Ajout de la possibilité d'initié des chronos pour identifier dans votre code ce qui prend du temps
Par exemple chronométrer le temps de récupération d'une requete

  
public function findAll(){
   plugin_debug::addChrono('debut requte A');
   $tArticle=$this->findMany('SELECT * FROM article');
   plugin_debug::addChrono('fin requete A');
   return $tArticle;
}
    


Vous verrez dans la barre un bouton "times" pour les afficher

2013/10/09 Amélioration du plugin plugin_debug

Ajout du log sql sur les drivers CSV et XML
Amélioration de l'affichage de la barre de debug plugin_debug

2013/10/08 Ajout d'un nouveau plugin: le plugin_debug

Celui-ci vous fournit en bas de l'écran (en mode dev) une barre de debug, celle -ci
- affiche les variables d'environnements $_GET,$_POST,$_SERVER,$_SESSION
- affiche les variables de connexion
- affiche les variables de configuration
- permet de debuguer une variable en utilisant un espion
- permet d'afficher le fichier de log, si l'option est activée

Utiliser un espion dans votre code avec

  
plugin_debug
::addSpy('mon commentaire'$oMaVariable);
    



note: si vous avez une application existante et que vous souhaitez utiliser ce plugin,
1. ajoutez dans votre fichier public/index.php
En début de script:

  
$iMicrotime
=microtime();
    


et en fin de script

  
if(_root::getConfigVar('site.mode')=='dev'){
   $oDebug=new plugin_debug($iMicrotime);
   echo $oDebug->display();
}
    


2. téléchargez le plugin plugin_debug dans le répertoire plugin/ de votre application (page de téléchargement
note: la documentation suivra très vite

2013/10/06 Amélioration du plugin plugin_routing

Vous pouvez désormais débrayer la page 404 si nécessaire:
Lorsque l'url rewriging est activé, le plugin cheche pour chaque url si elle est renseignée dans le fichier de configuration.
Dans le cas contraire, il redirige vers la page 404 inscrite dans le fichier de configuration.
Vous pouvez désormais désactiver cette page 404 en renseignant une nouvelle variable use404 dans la section [urlrewriting] du fichier conf/site.ini.php

2013/10/06 Amélioration de l'explorateur de projet

Vous pouvez désormais dans l'explorateur de projet editer le fichier en entier en plus de ligne à ligne.

2013/10/05 Amélioration du plugin_rouging et _cache

Coté cache, vous pouvez désormais supprimer un fichier de cache quand nécessaire (par exemple ajout d'un enregistrement)
Coté plugin_routing, vous pouvez désormais forcer des variables de manières cachées
Par exemple, vous avez une url index_2.html et vous souhaitez non seulement appelé un module avec le paramètre 2, mais également initialisé une seconde variable
Fichier conf/routing.php

  
'index_:postsid:.html' => array(
   'nav'=>'default::index',
   'tParam'=>array('postsid','postsAction'),
   'tParamHidden'=>array(
               'postsAction'=>'show',
   )
   ),
    



2013/10/04 Builder: amélioration du module authentification + inscription

Le module authentifaction + inscription généré via le builder vérfifie désormais la présence de l'utilisateur.
Le fichier de connexion (conf/connexion.ini.php), contenant les profils de connexions a été un peu simplifié pour les connexions utilisant pdo
On passe de

  
mysqlExple
.dsn="mysql:dbname=blog;host=localhost"
mysqlExple.sgbd=pdo_mysql
mysqlExple
.hostname=localhost
mysqlExple
.database=blog
mysqlExple
.username=root
mysqlExple
.password=root
   


à

  
mysqlExple
.dsn="mysql:dbname=blog;host=localhost"
mysqlExple.sgbd=pdo_mysql
mysqlExple
.username=root
mysqlExple
.password=root
   


En effet pour les connexions via pdo, les variables hostname et database ne sont pas utilisées: ces paramètres sont contenues dans la variable "dsn"

2013/09/30 Builder: amélioration des CRUD "normaux" et intégrable

Ajout de la possibilité de définir un label lorsque vous générer un module CRUD


2013/09/27 Builder: amélioration du CRUD intégrable

Même modification que pour le module CRUD

2013/09/26 Builder: amélioration du CRUD

Vous pouvez désormais, lors de la génération du CRUD, choisir les pages/actions à générer (ajout/modification/suppression/affichage) en cochant ou non des cases.

2013/09/24 Nouveau tutoriel pour créer votre propre réseau social

Vous avez bien lu, un tutoriel permet de créer votre propre réseau social, celui-ci est en cours de rédaction, il est mis en ligne au fur et à mesure
Il est disponible ici bigtutoriel_socialnetwork_I.html

2013/09/22 Refactorisation du builder et ajout d'une fonctionnalité

Coté coeur du builder: le builder a été refactorisé
Coté visible: vous pouvez désormais générer un module d'authentification + un formulaire d'inscription
Le menu du builder a été un peu amélioré, il y a désormais un regroupement par type de liens.


2013/09/15 Nouvelle fonctionnalité: le cache de variable

Vous avez désormais la possibilité de gerer un cache de variable. Proposé à l'origine pour vos requetes ORM, il permet:
- de gagner en performances
- de décharger votre SGBD
note: vous avez toujours la possibilité d'indiquer une date de "peremption" pour ce cache

Son utilisation:

  
   
public function findAll(){
       $sId='articleFindAll';

       //y a-t-il un cache pour cette variable ?
       if(_root::getCacheVar()->isCached($sId) ){
           //si oui, on recupere le tableau d'objets en cache
           $tArticle=_root::getCacheVar()->getCached($sId);
       }else{
           //si non: on execute la requete dans l'ORM et on enregistre le tableau en cache
           $tArticle $this->findMany('SELECT * FROM '.$this->sTable.'   ');
           _root::getCacheVar()->setCache($sId,$tArticle);
       }

       return $tArticle;

   }
    



2013/09/10 Deux nouvelles méthodes dans la couche modèle findManySimple et findOneSimple

Si vous avez besoin de performances, vous pouvez utiliser ces deux méthodes qui retourneront uniquement des simples objets (stdclass)
Ce faisant vous afficherez vos enregistrements plus vite qu'avec findMany et findOne, en revanche, les objets retournés seront des objets "simples" vous ne pouvez pas interagir avec, juste les afficher.

2013/09/08 Nouveau tutoriel sur la génération de module d'authentification

Un nouveau tutoriel est disponible et montre comme utiliser le builder pour générer un module d'authentification ici

2013/08/20 Mises à jour du builder

Le builder permet désormais de générer un module d'authentification en quelques clics.
L'explorateur de projet a également été un peu amélioré pour afficher mieux les fichiers de configuration.

2013/08/17 Amélioration du builder et mise à jour du site

Le builder permet désormais en plus de générer des modules CRUD de generer des module équivalent en lecture seule
Concernant le site, il devient bilingue ;)

2013/08/09 Disponibilité sur GitHub

Suite à de nombreuses discussions à propos notamment de la possibilité de soumettre des mises à jour et corrections de bugs, je viens d'installer le framework également sur github
L'adresse: https://github.com/imikado/mkframework
Pour information, le dépôt subversion reste actif, je fairais des mises à jour sur les deux, mais préferez la version svn pour votre environnent stable.

2013/08/09 Nouvelles méthodes disponibles isset/unset pour le layout/view et amélioration de l'explorateur de projet

Deux nouvelles méthodes pour améliorer votre utilisation des layout et des vues de vos applications:
Vous pouvez désormais vérifier l'assignation d'une variable avant de l'utiliser dans le layout et dans les vues.
Concernant l'explorateur de projet, l'adresse du fihier reste visible en amont du code même si vous scrollez

2013/08/01 Nouvelle fonctionnalité pour le Builder

Une nouvelle fonctionnalité importante sur le builder: l'explorateur de projet.
Celui-ci, en beta, permet
- de naviguer à travers les fichiers de vos projets,
- d'avoir une documentation contextuel
- de naviguer entre vos appels de classes model/module
- d'éditer vos fichiers avec des aides de code
C'est la première brique d'une fonctionnalité qui va vous faire gagner du temps.

2013/07/05 Mise à jour de la page de tutoriaux vidéos

La page mettait trop de temps à charger, j'ai opté pour un système de lien qui ouvre une popup où se joue la vidéo youtube.

2013/07/04 Correction des classes plugin sgbd_mysql, plugin_html et plugin_check

Ajout d'une méthode "isStrictlyEqual()" dans le plugin plugin_check permettant de faire un test d'égalité stricte contrairement à "isEqual()"
Et sécurisation des classes sgbd_mysql et plugin_check, note: pour mysql préférez l'utilisation de pdo_mysql (plus sur)

2013/07/03 Correction de la classe plugin_check

Une correction a été apportée sur la vérification du format d'un email.

2013/07/01 Nouvelle correction de la classe plugin_routing

Dernière correction en date qui corrige un problème lors de l'utilisation de plusieurs paramètres.
Par exemple dans le cas "article_:id:_:categorie:.html", pour une url de type article_2_archive.html il trouvait uniquement une variable "id" qui contenait "2_archive"
Désormais c'est corrigé ;)
Encore merci à @modulo2 (de developpez.com)

2013/06/30 Ajout d'une page de documentation

Une nouvelle page de documentation permet d'expliquer les variables des différents fichiers de configuration

2013/06/28 Correction de la classe plugin_routing

Un dernier bug concernant le plugin plugin_routing pour limiter le début et la fin de l'url
Il permettait d'indiquer de mauvaises url: zzz/backoffice/articles.html était aussi valide que backoffice/articles.html
Idem pour les caractères après: articles.html etait aussi valide que articles.html?variableInconnu=2
Pour rappel, vous pouvez télécharger uniquement le plugin corrigé dans la page de téléchargement

2013/06/27 Correction de la classe plugin_routing

Un autre bug a été corrigé concernant le plugin_routing, il ne retournait pas la bonne valeur en cas de variable en début de "pattern"
Par exemple si vous aviez :id:_page.html, il récupérait la totalité de l'url jusqu'à _page.html
Merci à @modulo2 (de developpez.com)

2013/06/27 Correction de la classe plugin_routing

Un bug a été corrigé concernant le plugin_routing, il ne trouvait pas la bonne règle si le nom de ces pages se ressemblait, par exemple il confondait connexion.html et deconnexion.html (selon l'ordre dans lequel il était renseigné).
Merci à @modulo2 (de developpez.com)

2013/06/18 Correction de la classe _root

Correction lors de l'appel du module principal, celui-ci appelait la méthode after_action() avant votre méthode _action()
Merci à @modulo (de developpez.com)

2013/06/11 Page sur la sécurité

Une nouvelle page fait son apparition et vous indique quels éléments de sécurité sont gérés par le framework et lesquels sont à la charge du développeur.
La page: http://mkdevs.com/security.html

2013/06/09 Correction du du builder (générateur web) et sources

Le sous menu permettant de générer un menu avait un soucis avec les projet généré "avec exemples", c'est désormais corrigé
A ce propos deux choses au niveau des projets générés "avec examples":
1. les modules d'exemple (utilisé pour les générations) ne sont pu copiés
2. le module article d'exemple utilise des tableaux de jointures pour afficher le nom des auteurs ;)

2013/06/09 Correction du menu du builder (générateur web)

Lors d'une mise à jour du builder, j'ai malencontreusement livré une entrée dans le menu du générateur web pas encore prête "ajouter un module", j'ai créé une version en enlevant cette entrée.
A terme il y aura un sous menu permettant d'ajouter certains types de module (authentification...)

2013/06/07 Mise à jour du site

Amélioration de la documentation: j'ai scindé la doc API en deux menus: d'un coté la documentation doxygen, de l'autre une page qui permet de trouver facilement la documentation d'une classe.

2013/06/05 Générateur web: Ajout d'un menu pour créer un menu

Une nouvelle entrée dans le générateur web, elle permet de générer un menu à partir des modules présents sur votre projet.
Vous pouvez, via un formulaire, sélectionner les méthodes des modules et leur libéllés dans le menu.

2013/06/01 Amélioration du plugin plugin_upload

Suite à une remarque pertinente d'un membre de developpez.com (modulo2,que je remercie au passage) le plugin a ainsi été amélioré.

2013/05/30 Changement de licence, passage de la AGPLv3 à la LGPLv3

Suite aux nombreuses discussions que j'ai pu avoir sur le sujet, je change la licence du framework pour une licence plus permessive pour permettre une plus large adoption du framework ;)
Le framework passe ainsi en LGPLv3 :)