News

2008/10/22 V3_28_0_94 reglage d'un petit bug sur la generation crud

Sur un environnement gerant le case sensitive (linux...) le resultat de la generation CRUD ne fonctionnait pas sur l'action new
En effet alors que les autres actions utilisaient le nom de la table avec une majuscule, l'action new utilisait une version minuscule
Ceci est desormais corrigé

Le code incriminé
dans module/table/action.php

Code


<?php 
function _new(){
$table=new table;
//(...)
 
?>


remplacée par

Code


<?php 
function _new(){
$table=new Table;
//(...)
 
?>


2008/10/14 V3_28_0 amelioration sgbd xml + verification urlrewriting lors d'une creation d'application

Le sgbd xml maison gere desormais un id max, permettant d'ameliorer la gestion des enregistrements
Si vous avez des enregistrements 1,2,3,4, desormais si vous supprimez le 2, le prochain créé sera le 5
Pour l'url rewriting, lors du formulaire de creation d'une application, on indique en rouge en dessous si l'url rewriting est géré
si il ne l'est pas, le .htaccess ne sera pas créé lors de la generation du nouvel environnement

2008/10/09 V3_27_0 gestion des magic quotes si active + nouveau plugin en cours

Par defaut je preconise de desactiver les magic quotes, mais desormais le cas est géré si on a pas la main (hebergement mutualise par exemple)
De plus un nouveau plugin commence a etre developpé : le plugin ftp

2008/08/07 V3_26_0 amelioration petit a petit de la documentation

Petit a petit je commente les methodes public du framework (inc/ plugin/)
(permettant notamment d'utiliser phpdoc and co :)

2008/07/31 V3_26_0 petite optimisation du framework + homogeneisation sgbd/xml

Une petite optimisation a été réalisée sur l'orm limitant les acces a certains fichiers
De plus desormais le passage d'un stockage xml (mini base xml) a une base de donnée vient d'etre simplifiée
Les deux utilise desormais la classe ORM, seul le parametrage (conf/connexion.php) indique le type de stockage comme pour les autres sgbd
Avant :

Code


<?php 
Class article extends ORMXML{
    
//Configuration-------------------------------------------
    
protected $idTab=array('id');
    protected 
$tableName='article';
    protected 
$connexion='xml';
    protected 
$className=__CLASS__;
    
//-------------------------------------------Configuration
}
 
?>

Maintenant

Code


<?php 
Class article extends ORM{
    
//Configuration-------------------------------------------
    
protected $idTab=array('id');
    protected 
$tableName='article';
    protected 
$connexion='xml';
    protected 
$className=__CLASS__;
    
//-------------------------------------------Configuration
}
 
?>


fichier connexion.php

Code


<?php 
$tabConnexion
=array(
        (...)
            
            
'xml' => array(
                        
'pdo' => false,
                        
'dsn' => '',
                        
'sgbd' => 'xml',
                        
'host' => '',
                        
'bdd' => 'data/xml/base/',
                        
'user' => '',
                        
'pass' => '',
                        
'formatDate' => '$Y-$m-$d',
                        
'formatDateTime' => '$Y-$m-$d $h:$i:$s',
            ),
        (...)
 
?>


2008/07/30 V3_25_0 amelioration Base Xml

Une amelioration du mini sgbd xml
On peut desormais utiliser quelques criteres: = != >= <= > <
Par contre on ne peut utiliser soit AND soit OR pas les deux en meme temps
Ces criteres sont bien sur cumulable avec la clause ORDER BY
On peut donc faire getInstance('Contenu')->find('cat_id=2 OR cat_id=3 ORDER BY titre DESC')

2008/07/08 V3_24_0 ajout Base Xml, amelioration url rewriting, allegement

Au menu de cette mise a jour plusieurs choses
1. La possibilité désormais d'utiliser une "base de donnée xml" locale, toujours via le builder, un nouveau lien permet de creer une base de donnée
elle se compose simplement d'un repertoire, contenant au minimum un fichier xml 'structure.xml' utilisé plus tard par le builder pour generer le crud :)
note: c'est une base de donnée simplifié on peut lister, trier via un seul champ(order by champ), faire des limites mais ca s'arrete la, pas recherche ou autre requete complexe
note2: on peut neanmoins utiliser les joitures de l'orm qui fonctionne naturellement
2. Amelioration de l'url rewriting:
Un nouveau fichier de configuration fait son apparition 'conf/urlrewriting.php' il permet de mettre en place des liens plus sympas
sa structure est la suivante : 'articles' => 'article::show'
ou pour l'utilisation de variable: 'articleDetail_:id:' => 'article::show' (pas besoin de preciser id, sa valeur sera transmise au tableau $_GET)
3. Un allegement assez consequent a été réalisé sur le framework

2008/06/17 V3_23_0 securisation xss,xsrf

Ajout d'une securistion xss sur la fonction getVar
Ainsi que la creation d'un plugin xss qui est ici utilisé pour corrigé les failles xsrf via l'utilisation de jeton
note: le crud du nouveau builder est généré avec l'utilisation de ce nouveau plugin ;)
Un nouveau fichier de configuration conf/securite.php permet d'activer/desactiver ces deux nouveaux parametres.

Plus d'infos sur XSS
Plus d'infos sur XSRF

2008/06/12 V3_22_0_56 ajout autre systeme de jointure via les hasOne/Many et recupClasseEtrangere

On a desormais un autre moyen de faire des jointures sur le framework
Prenons pour exemple deux tables: client et commande
On veut que sur nos enregistrements commande on puisse avoir les informations de notre client
Dans la classe Commande.php dans la methode init()

Code


<?php 
Class Commande extends ORM{
//(..)
//Jointure------------------------------------------------
public function init(){
    
//une commande a un client dont id est egal a client_id
    
$this->hasOne('Client')->dont('id')->egal('client_id');
}
//------------------------------------------------Jointure
 
?>

Dans notre vue, on fera ainsi pour afficher le nom du client:

Code


<?php 
foreach($commandeTab as $commande){
    echo 
$commande->recupClient()->nom;
}
 
?>


On veut egalement que d'un client on ai la liste de ses commandes
Dans la classe Client.php dans la methode init()

Code


<?php 
Class Client extends ORM{
//(..)
//Jointure------------------------------------------------
public function init(){
    
//un client a plusieurs commande dont client_id est egal a id
    
$this->hasMany('Commande')->dont('client_id')->egal('id');
}
//------------------------------------------------Jointure
 
?>

Dans notre vue, on fera ainsi pour afficher la liste de ses commandes:

Code


<?php 
//on a recupere au prealable client par exemple $client=getInstance('Client')->findOne(1);
foreach($client->recupCommande() as $commande){
    echo 
$commande->id;
}
 
?>


2008/06/10 v3_21_0 mise a jour orm + builder, ajout pdo

On peut desormais utiliser le driver pdo pour se connecter, ceci a permis de developper de nouveaux drivers pour se connecter a d'autres sgbd.
Oracle, Sql server (microsoft) sont desormais disponible comme sgbd via l'ORM maison en Beta :)
L'ergonomie de generation du CRUD a été également améliorée.

2008/05/29 v3_20_4 mise a jour builder

Le builder a été mis a jour, il permet de générer plus facilement le CRUD, on peut désormais parametrer le libellé des champs ainsi que le type de champ de formulaire à utiliser.
Il est également plus simple de générer un CRUD pour des tables liées.
Par exemple on a une table article liée à une table auteur via la relation article.auteur_id=auteur.id.
On genere la couche modèle, ensuite on genere la methode getSelect (via le buider), on insere les lignes de codes générées dans le fichier de la classe auteur (bdd/auteur.php)
Au moment de generer le CRUD, en face du champ auteur_id, il faut selectionner "select table auteur" à la place de input
Le builder va generer un select qui s'appuiera sur le tableau renvoyé par la methode getSelect de la table auteur
Et voila, dans notre crud on aura en face du champ auteur_id un menu deroulant listant les auteurs ;)

2008/05/27 v3_20_3 mise a jour projet vierge : mise a jour plugin_rss

En testant le flux rss dans firefox je me suis rendu compte qu'il était corrompu, apres debugage via le feed validator du w3c j'ai corrigé le plugin
La date passé au plugin rss doit etre au format Y-m-d
Le projet vierge a également été mis a jour.

2008/05/27 v3_20_2 changement style + correction bugs sur projet vierge + ajout langue par defaut

J'ai revu le style graphique du projet vierge (sera bientot mis à jour dans les screenshots).
Corrigé quelques bugs sur les pages d'exemples.
Ajouté un fichier de conf conf/langue.php qui permet de configurer la langue par defaut :le calendrier, mkdate... s'appuyant sur i18n il leur fallait bien une langue par defaut pour savoir quel package de langue utiliser.

2008/05/23 v3_20 ajout de trois plugins sur les sources

J'ai ajouté sur les sources 3 plugins sur les sources avec comme d'habitude une page d'exemple pour chaque

Premier plugin: plugin_gestionuser
Il permet de gérer les droits, vous ajoutez une methode coté modele (dans votre fichier bdd/user.php par exemple)
Dans cette methode vous créé une instance de ce plugin, vous assignez les droits et vous retournez l'objet
Comme cela de n'importe ou, avec l'instance de votre user vous pouvez demander cet objet pour savoir si le user est authorisé à...

Les deux autres plugins font partie d'une nouvelle fonctionnalité: gérer un webservice à la sauce mkframework
Trouvant que l'installation d'un webservice "officiel" était trop lourd (fichier wsdl, parametrage en dur des fonctions disponibles...)
J'ai décidé de créer un autre systeme qui peut etre securisé par mot de passe et/ou ip
Ce "webservice maison" je l'ai testé en l'appelant en web (du mkframework) mais aussi via un script perl et ca fonctionne tres bien
Il suffit de faire un appel http POST a la page qui fait office de serveur, lui envoyant une variable post (n'importe laquelle) contenant l'appel en xml tres simple.
Un exemple est present dans les nouvelles sources ;)

2008/05/20 v3_19 ajout classe MKPANIER + integration exemple dans projet vierge

Une nouvelle classe pour gerer son panier le plus simplement possible.
On créé une instance recuperant si existant ce qu'il y a en session, elle se sauvegarde a chaque modification en session.
On manipule ainsi son panier comme un objet, en lui ajoutant / supprimant des lignes , modifiant les quantités...
On a plus qu'a boucler dessus pour afficher son contenu
Note: un exemple d'utilisation est intégré au projet vierge

2008/05/19 v3_18 amelioration objet CHECK (validateur) + maj Sources avec exemple CHECK

Amelioration de l'objet CHECK qui permet de verifier un ensemble d'element (utilise pour verifier les formulaires)
Ainsi que l'ajout d'un exemple dans le projet vierge

2008/05/19 v3_17 correction bug + projet vierge

Correction d'un bug lié a la verification is_writable() dans la librairie file du builder et des sources
Mise a jour du projet vierge (mise a jour de la partie backoffice generable sur demande)

2008/05/19 v3_16 correction bug + builder + projet vierge + fichier de conf

La migration precedente incluait un changement lors de l'appel, mais aussi un renommage de la classe TPL en MKTPL, il y avait encore des appels a TPL dans les sources
Ils ont desormais tous été corrigé.
Dans le builder, le generateur de code a été un peu amélioré
Le projet vierge généré lors de la creation d'un nouveau site a été mis a jour.
Un nouveau fichier de configuration a été créé: conf/encodage.php qui permet d'indiquer l'encodage des fichiers de scripts (ISO-88-59-1 par defaut)
utilisé par défaut pour HTML::encode()

2008/05/16 v3_15 Changement important getInstance('TPL') > getInstanceTpl()

TPL, etait la seule librairie necessitant d'etre en singleton, c'est a dire d'avoir qu'une seule instance de l'objet dans l'application
Et utilisant egalement getInstance() pour l'ORM, on pouvait confondre getInstance('TPL') en lisant entre une table ou une librairie
Desormais on utilise getInstanceTpl() pour le template general et getInstance() pour les tables orm, voir les modules et plugin qui utilisent la convention plugin_ et module_

Avant

Code


<?php 
$tab
=getInstance('article')->find();

$tpl=getInstance('TPL');
$tpl->assign('articleTab',$tab);
$tpl->display('list');
$tpl->send('template1');
 
?>


Après

Code


<?php 
$tab
=getInstance('article')->find();

$tpl=getInstanceTpl();
$tpl->assign('articleTab',$tab);
$tpl->display('list');
$tpl->send('template1');
 
?>



2008/05/16 v3_14 Amelioration: support du rss

Un nouveau plugin le plugin_rss fait son aparition, il est inclue dans les projets vierge généré un exemple de son implementation
Documentation de plugin_rss

2008/05/16 v3_12 Mise a jour, amelioration du builder + amelioration variable de navigation

Pour le builder, la generation de jointure est plus flexible elle permet de generer des recuperations d'objet ou de tableau d'objet
Pour la variable de navigation: si vous appelez un module sans son action, par defaut il appelera sa methode_index()

2008/05/15 v3_11 Mise a jour, correction du builder + evolution ORM: cache variable

Je viens de corrigé une erreur dans le builder provoqué par la mise a jour precedente (pour doctrine)
Plus j'ai ajouté un cache temporaire a l'orm permettant dans le cas ou vous faites deux fois une jointure sur un meme enregistrement de ne faire qu'une seule requete
Pour info le cache est stockée dans l'objet ORM de la table
Par exemple vous recuperez le tableau des articles

Code


<?php 
$tab
=getInstance('article')->find();
 
?>

Le cache est stocké dans "article", getInstance() retournant un singleton de la classe article
D'ou l'ajout de getNewInstance() qui retoune un nouvel objet tout propre tout vide (sans cache)
Car si vous faites

Code


<?php 
$article
=getInstance('article')->findOne(1);
$article->titre='titreModifie';
$article->save();
//ici si vous faites un getInstance('article')->findOne(1) vous recupérez l'article du cache
//article du cache
$article=getInstance('article')->findOne(1);
//article modifié (pas celui du cache)
$article=getNewInstance('article')->findOne(1);
 
?>

C'est le seul cas ou vous devriez avoir besoin d'utiliser getNewInstance() avec l'ORM

2008/05/14 v3_10 Mise a jour, correction du builder pour utilisation de la derniere version de phpDoctrine

J'ai mis a jour la version de doctrine presente dans le framework et mis a jour le builder pour sa compatibilité
Pour info, utilisation de phpDoctrine 0.11.0-RC2

2008/05/13 v3_9 Mise a jour, correction de quelques bugs + ajout du D du CRUD (Delete)

Il etait temps, j'avais un peu oublié d'ajouter l'action supprimer sur le generateur de crud, c'est fait :)
Il y avait également un bug sur le builder pour modifier la couche modèle.

2008/05/07 v3_5 Mise a jour, correction de quelques bugs

Je travaille actuellement avec sur une application,
et en profite pour bien tester le framework et le mettre a jour quand il le faut.
Par exemple j'ai ajouté la classe MKDATE, qui permet de gerer facilement ses dates

Code


<?php 
$date
=new MKDATE(date('2008-12-25');   
$date->addJour(1);   
echo 
$date->getFormat('$d $m $y');
 
?>

affichera 26 dec 08

Documentation de MKDATE

2008/04/01 Nouvelle version, nouveau site

Nouveau site mkFramework pour la version 3 du framework.
Un framework encore plus objet qu'auparavant, plus souple qu'avant.
Une documentation refaite de A à Z