/trunk/framework/Registre.php |
---|
1,86 → 1,69 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe registre, qui permet un accès à différentes variables à travers les autres classes. |
* Classe Registre, qui permet un accès à différentes variables et paramètres à travers les autres classes. |
* C'est un remplaçant à la variable magique $_GLOBALS de Php. |
* C'est un singleton. |
* Si vous avez besoin de modifier dynamiquement des paramètres de configuration, utiliser le @see Registe, il est fait pour ça. |
* Si vous voulez paramètré votre application via le fichier config.ini, utilisez plutôt la classe @see Config. |
* |
* @category php 5.2 |
* @package Framework |
* @author Jean-Pascal Milcent <jmp@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @author Jean-Pascal MILCENT <jmp@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version SVN: $Id$ |
* @version $Id$ |
* @link /doc/framework/ |
* |
*/ |
class Registre { |
/** Tableau associatif stockant les variables */ |
private $stockage = array(); |
/** Tableau associatif stockant les variables. */ |
private static $stockage = array(); |
/** La classe registre se contient elle-même, (pour le pattern singleton) */ |
private static $registre; |
/** Constructeur par défaut, privé, car on accède à la classe par le getInstance */ |
private function __construct() { } |
/** |
* Fonction qui renvoie l'instance de classe en assurant son unicité, c'est l'unique méthode qui doit être |
* utilisée pour récupérer l'objet Registre |
*/ |
public static function getInstance() { |
if (self::$registre instanceof Registre) { |
return self::$registre; |
} |
self::$registre = new Registre; |
return self::$registre; |
} |
/** |
* Ajoute un objet au tableau selon un intitulé donné |
* Ajoute un objet au tableau selon un intitulé donné. |
* @param string l'intitulé sous lequel l'objet sera conservé |
* @param mixed l'objet à conserver |
*/ |
public function set($intitule, $objet) { |
if (is_array($objet) && isset($this->stockage[$intitule])) { |
$this->stockage[$intitule] = array_merge((array) $this->stockage[$intitule], (array) $objet); |
public static function set($intitule, $objet) { |
if (is_array($objet) && isset(self::$stockage[$intitule])) { |
self::$stockage[$intitule] = array_merge((array) self::$stockage[$intitule], (array) $objet); |
$message = "Le tableau $intitule présent dans le registre a été fusionné avec un nouveau tableau de même intitulé !"; |
trigger_error($message, E_USER_WARNING); |
} else { |
$this->stockage[$intitule] = $objet; |
self::$stockage[$intitule] = $objet; |
} |
} |
/** |
* Renvoie l'objet associé à l'intitulé donné en paramètre |
* Renvoie le contenu associé à l'intitulé donné en paramètre. |
* @return mixed l'objet associé à l'intitulé ou null s'il n'est pas présent |
*/ |
public function get($intitule) { |
if (isset($this->stockage[$intitule])) { |
return $this->stockage[$intitule]; |
} |
return null; |
public static function get($intitule) { |
$retour = (isset(self::$stockage[$intitule])) ? self::$stockage[$intitule] : null; |
return $retour; |
} |
/** |
* Détruit l'objet associé à l'intitulé, n'a pas d'effet si il n'y a pas d'objet associé |
* Détruit l'objet associé à l'intitulé, n'a pas d'effet si il n'y a pas d'objet associé. |
* @param string l'intitulé de l'entrée du registre à détruire. |
*/ |
public function detruire($intitule) { |
if (isset($this->stockage[$intitule])) { |
unset($this->stockage[$intitule]); |
public static function detruire($intitule) { |
if (isset(self::$stockage[$intitule])) { |
unset(self::$stockage[$intitule]); |
} |
} |
/** |
* Teste si un objet est présent sous un intitulé donné |
* Teste si le registre contient une donnée pour un intitulé d'entrée donné. |
* @param string l'intitulé de l'entrée du registre à tester. |
* @return boolean true si un objet associé à cet intitulé est présent, false sinon |
*/ |
public function existe($intitule) { |
if (isset($this->stockage[$intitule])){ |
return true; |
} |
return false; |
public static function existe($intitule) { |
$retour = (isset(self::$stockage[$intitule])) ? true : false; |
return $retour; |
} |
} |
?> |
/trunk/framework/Chronometre.php |
---|
11,19 → 11,14 |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version SVN : $Id$ |
* @version $Id$ |
* @link /doc/framework/ |
*/ |
class Chronometre { |
/*** Attributs : ***/ |
private static $instance = null; |
private static $pointArretNumero = 1; |
private static $temps = array(); |
/** Constructeur : **/ |
private function __construct() { |
self::setTemps('depart', microtime()); |
} |
/** Accesseurs : |
* |
* @param string $cle la cle associée à un chronomètre particulier |
31,12 → 26,7 |
* @return int le temps écoulé |
*/ |
private static function getTemps($cle = null) { |
$temps = ''; |
if (!is_null($cle)) { |
$temps = self::$temps[$cle]; |
} else { |
$temps = self::$temps; |
} |
$temps = (is_null($cle)) ? self::$temps : self::$temps[$cle]; |
return $temps; |
} |
53,14 → 43,16 |
/*** Méthodes : ***/ |
/** |
* Effectue un chronometrage. |
* Effectue un chronometrage. |
* Vous pouvez indiquer le nom du point de chronométrage. |
* Si vous n'indiquez rien, un nombre sera généré en débutant à 1. |
* |
* @param string le nom du point de chronométrage |
* @return null |
*/ |
public static function chrono($cle) { |
public static function chrono($cle = null) { |
$cle = ($cle == null) ? self::$pointArretNumero++ : $cle; |
$moment = microtime(); |
self::verifierCreationInstance(); |
self::setTemps($cle, $moment); |
} |
75,37 → 67,16 |
* Le développeur initial de cette fonction est Loic d'Anterroches. |
* Elle a été modifiée par Jean-Pascal Milcent. |
* |
* @author Loic d'Anterroches |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* |
* @param int $indentation_origine l'indentation de base. |
* @param int $indentation le pas d'indentation. |
* @author Loic d'Anterroches |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @param string l'eventuel nom du point de chronométrage de fin. |
* @return string la chaine XHTML de mesure des temps. |
*/ |
public static function afficherChrono($indentation_origine = 8, $indentation = 4) { |
self::verifierCreationInstance(); |
public static function afficherChrono($cle = null) { |
// Création du chrono de fin |
self::setTemps('fin', microtime()); |
self::chrono(); |
// Début création de l'affichage |
$sortie = str_repeat(' ', $indentation_origine) . |
'<table id="chrono" lang="fr" summary="Résultat du |
chronométrage du programme affichant la page actuelle.">' . "\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) . |
'<caption>Chronométrage</caption>' . "\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) . |
'<thead>' . "\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 2))) . |
'<tr><th>Action</th><th>Temps écoulé (en s.)</th> |
<th>Cumul du temps écoulé (en s.)</th></tr>' . "\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) . |
'</thead>' . "\n"; |
$tbody = str_repeat(' ', ($indentation_origine + ($indentation * 1))) . |
'<tbody>' . "\n"; |
$total_tps_ecoule = 0; |
// Récupération de la premiére mesure |
$tab_depart = self::getTemps(0); |
list ($usec, $sec) = explode(' ', $tab_depart['depart']); |
112,7 → 83,8 |
// Ce temps correspond à tps_fin |
$tps_debut = ((float) $usec + (float) $sec); |
$tbody = ''; |
foreach (self::getTemps() as $tab_temps) { |
foreach ($tab_temps as $cle => $valeur) { |
list ($usec, $sec) = explode(' ', $valeur); |
120,44 → 92,30 |
$tps_ecoule = abs($tps_fin - $tps_debut); |
$total_tps_ecoule += $tps_ecoule; |
$tbody .= str_repeat(' ', |
($indentation_origine + ($indentation * 2))) . |
'<tr>' . |
'<th>' . $cle . '</th>' . |
'<td>' . number_format($tps_ecoule, 3, ',', ' ') . '</td>' . |
'<td>' . number_format($total_tps_ecoule, 3, ',', ' ') . '</td>' . |
'</tr>' . "\n"; |
$tps_debut = $tps_fin; |
// Gestion affichage |
$total_tps_ecoule_fmt = number_format($total_tps_ecoule, 3, ',', ' '); |
$tps_ecoule_fmt = number_format($tps_ecoule, 3, ',', ' '); |
$tbody .= '<tr><th>'.$cle.'</th><td>'.$tps_ecoule_fmt.'</td><td>'.$total_tps_ecoule_fmt.'</td></tr>'."\n"; |
} |
} |
$tbody .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) . |
'</tbody>' . "\n"; |
$total_tps_ecoule_final_fmt = number_format($total_tps_ecoule, 3, ',', ' '); |
// Début création de l'affichage |
$sortie = '<table id="chrono" lang="fr" summary="Résultat duchronométrage du programme affichant la page actuelle.">'."\n". |
'<caption>Chronométrage</caption>'."\n". |
'<thead>'."\n". |
' <tr><th>Action</th><th>Temps écoulé (en s.)</th><th>Cumul du temps écoulé (en s.)</th></tr>'."\n". |
'</thead>'."\n". |
'<tbody>'."\n". |
$tbody. |
'</tbody>'."\n". |
'<tfoot>'."\n". |
' <tr><th>Total du temps écoulé (en s.)</th><td colspan="2">'.$total_tps_ecoule_final_fmt.'</td></tr>'."\n". |
'</tfoot>'."\n". |
'</table>'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) . |
'<tfoot>' . "\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 2))) . |
'<tr>' . |
'<th>' . 'Total du temps écoulé (en s.)' . '</th>' . |
'<td colspan="2">' . |
number_format($total_tps_ecoule, 3, ',', ' ') . '</td>' . |
'</tr>' . "\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) . |
'</tfoot>' . "\n"; |
$sortie .= $tbody; |
$sortie .= str_repeat(' ', $indentation_origine) . |
'</table>' . "\n"; |
return $sortie; |
} |
/** |
* Vérifie si l'instance de classe à été crée, si non la créer |
*/ |
private static function verifierCreationInstance() { |
if (empty(self::$instance)) { |
self::$instance = new Chronometre(); |
} |
} |
} |
?> |
/trunk/framework/Bdd.php |
---|
179,12 → 179,19 |
} |
/** |
* @deprecated changement de nom. Disparaîtra dans la version 0.4. Utiliser à la place : @see requeter |
*/ |
final protected function requete($requete) { |
return $this->requeter($requete, $mode); |
} |
/** |
* Execute une requête et retourne le résultat tel que renvoyé par l'abstraction courante. |
* |
* @param string la requête à effectuer |
* @return mixed un objet contenant le résultat de la requête |
*/ |
public function requete($requete) { |
public function requeter($requete) { |
$this->connecter(); |
$retour = null; |
209,8 → 216,15 |
} |
return $retour; |
} |
/** |
* @deprecated changement de nom. Disparaîtra dans la version 0.4. Utiliser à la place : @see recuperer |
*/ |
final protected function requeteUn($requete, $mode = self::MODE_ASSOC) { |
return $this->recuperer($requete, $mode); |
} |
/** |
* Execute une requête et retourne le premier résultat sous forme de tableau (par défaut) ou d'objet. |
* Les noms des champs de la base de données correspondent aux noms des clés du tableau ou aux noms des attributs de l'objet. |
* |
218,7 → 232,7 |
* @param string le mode de retour ASSOC (Bdd::MODE_ASSOC) pour un tableau ou OBJECT (Bdd::MODE_OBJET) pour un objet. |
* @return mixed un objet ou un tableau contenant le résultat de la requête |
*/ |
public function requeteUn($requete, $mode = self::MODE_ASSOC) { |
public function recuperer($requete, $mode = self::MODE_ASSOC) { |
$this->connecter(); |
$retour = null; |
248,8 → 262,15 |
} |
return $retour; |
} |
/** |
* @deprecated changement de nom. Disparaîtra dans la version 0.4. Utiliser à la place : @see recupererTous |
*/ |
final protected function requeteTous($requete, $mode = self::MODE_ASSOC) { |
return $this->recupererTous($requete, $mode); |
} |
/** |
* Execute une requête et retourne un tableau de résultats. Un résultat peut être présentés sous forme |
* de tableau (par défaut) ou d'objet. |
* Les noms des champs de la base de données correspondent aux noms des clés du tableau résultat ou |
259,9 → 280,9 |
* @param string le mode de retour des résultats : ASSOC (Bdd::MODE_ASSOC) pour un tableau ou OBJECT (Bdd::MODE_OBJET) pour un objet. |
* @return array un tableau contenant les résultats sous forme d'objets ou de tableau (par défaut). |
*/ |
public function requeteTous($requete, $mode = self::MODE_ASSOC) { |
public function recupererTous($requete, $mode = self::MODE_ASSOC) { |
$this->connecter(); |
$retour = null; |
switch ($this->abstraction) { |
case self::ABSTRACTION_PDO : |
336,6 → 357,38 |
} |
/** |
* Retourne l'identifiant de la dernière ligne insérée, ou la dernière valeur d'une séquence d'objets, dépendamment, dans |
* le cas de PDO, du driver utilisé. Les méthodes utilisées pour retourner l'identifiant peuvent avoir des comportements |
* différent. Consulter la documentation PHP correspondant à l'abstraction choisie avant de l'utiliser : |
* @link(http://fr.php.net/manual/fr/pdo.lastinsertid.php, PDO::lastInsertId([ string $name = NULL ])) |
* @link(http://php.net/manual/en/mysqli.insert-id.php, mysqli->insert_id()) |
* @link(http://fr.php.net/manual/fr/function.mysql-insert-id.php, mysql_insert_id()) |
* @link(http://fr.php.net/manual/fr/sqlite3.lastinsertrowid.php, SQLite3::lastInsertRowID()) |
* @param mixed un paramètre éventuel à transmettre (en fonction de l'abstraction de BDD utilisée). |
* @return mixed le dernier identifiant de clé primaire ajouté dans la base de données (string ou int). |
*/ |
public function recupererIdDernierAjout($parametres = null) { |
$this->connecter(); |
$retour = $chaine; |
switch ($this->abstraction) { |
case self::ABSTRACTION_PDO : |
$retour = $this->connexion->lastInsertId($parametres); |
break; |
case self::ABSTRACTION_MYSQL : |
$retour = mysql_insert_id($this->connexion); |
break; |
case self::ABSTRACTION_MYSQLI : |
$retour = $this->connexion->insert_id(); |
break; |
case self::ABSTRACTION_SQLITE3 : |
$retour = $this->connexion->lastInsertRowID(); |
break; |
} |
return $retour; |
} |
/** |
* Destructeur de classe, se contente de fermer explicitement la connexion à la base de donnée. |
*/ |
protected function __destruct() { |
/trunk/framework/Controleur.php |
---|
5,14 → 5,14 |
* qui devrait être appelée de l'extérieur. |
* Elle est abstraite donc doit obligatoirement être étendue. |
* |
* @category php5 |
* @package Framework |
* @category php 5.2 |
* @package Framework |
* @author Aurélien PERONNET <aurelien@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version SVN: $Id$ |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version $Id$ |
* @link /doc/framework/ |
* |
*/ |
20,8 → 20,17 |
/** Variable statique indiquant que les tableaux _GET et _POST ont déjà été encodé au format de l'appli. */ |
private static $encodage = false; |
/** Registre global, normalement accessible partout */ |
private $registre; |
/** Chemin de base vers les classes métiers de la partie Modèle de l'application. */ |
private $base_chemin_modele = null; |
/** Chemin de base vers les fichiers squelette de la partie Vue de l'application. */ |
private $base_chemin_squelette = null; |
/** Chemin de base vers les classes controleurs de la partie Controleur de l'application. */ |
private $base_chemin_controleur = null; |
/** Base de l'url de l'application. */ |
private $base_url_applicaton = null; |
/** |
* Constructeur par défaut |
/trunk/framework/Config.php |
---|
4,7 → 4,8 |
* Config permet de charger automatiquement les fichiers ini du Framework et de l'application. |
* Elle offre l'accès en lecture seule aux paramètres de config. |
* C'est une Singleton. |
* |
* Si vous avez besoin de modifier dynamiquement des paramètres de configuration, utiliser le @see Registe, il est fait pour ça. |
* |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |