diff --git a/cms2/.htaccess b/cms2/.htaccess new file mode 100644 index 0000000..c3c0fcf --- /dev/null +++ b/cms2/.htaccess @@ -0,0 +1 @@ +php 5 diff --git a/cms2/code/TODO b/cms2/code/TODO index 9dae6fe..5f4c67c 100644 --- a/cms2/code/TODO +++ b/cms2/code/TODO @@ -1,8 +1,11 @@ -- Debug : grouper les erreurs, améliorer l'affichage. - - Valeur de retour des res_t_xxx ? Lorsqu'on appelle GalerieIndex::res_i_icône_nouvelle_page(), ça fait un sendfile alors que GalerieIndex::res_h_page() renvoie un objet ElementDocument, et GalerieIndex::res_c_style() renvoie du texte (CSS) pour inclusion dans le CSS principal... alors que res_c_style_supplémentaire() fait je-sais-pas-quoi... Comment gérer tout ça ? Selon le type de ressource on envoie direct ou on récupère (html,css => récup, img => envoi). + +- PHP5.3 chez ovh : http://guide.ovh.com/Php5ChezOvh (.htaccess avec "SetEnv PHP_VER 5_TEST") +- Compatibilité free.fr : + soit il faut supprimer le fichier index.php (pour que index.php5 ait la priorité), + soit il faut transférer .htaccess (qui spécifie qu'il faut utiliser php5). \ No newline at end of file diff --git a/cms2/code/bdd.php5 b/cms2/code/bdd.php5 index e2cd035..9817bce 100644 --- a/cms2/code/bdd.php5 +++ b/cms2/code/bdd.php5 @@ -15,7 +15,7 @@ class BDD { Config::get('db_mot_de_passe') ); if (!is_resource(self::$handle)) { - Debug::erreur("Échec à la connexion à la base de données"); + Debug("erreur", "Échec à la connexion à la base de données"); } // TODO : begin transaction à la 1ere écriture. self::begin_transaction(); @@ -42,10 +42,10 @@ class BDD { public static function init() { self::unbuf_query("create database if not exists " . Config::get('db_base')); - mysql_select_db(Config::get('db_base'), self::$handle) or Debug::erreur_sql(); + mysql_select_db(Config::get('db_base'), self::$handle) or Debug("erreur_sql"); if (count(self::select("show tables like '" . self::table("_pages") . "'")) == 1) { - Debug::info("La base de données est déjà initialisée, on continue..."); + Debug("info", "La base de données est déjà initialisée, on continue..."); return; } @@ -113,13 +113,13 @@ class BDD { } public static function unbuf_query($q) { - debug::sql($q . ";"); - mysql_unbuffered_query($q . ";", self::get()) or Debug::erreur_sql(); + Debug("sql", $q . ";"); + mysql_unbuffered_query($q . ";", self::get()) or Debug("erreur_sql"); } public static function select($q) { - debug::sql($q); - $qres = mysql_query($q, BDD::get()) or Debug::erreur_sql(); + Debug("sql", $q); + $qres = mysql_query($q, BDD::get()) or Debug("erreur_sql"); $ret = array(); while ($row = mysql_fetch_array($qres)) { $ret[] = $row; @@ -131,18 +131,18 @@ class BDD { public static function select_one($q, $strict = true) { $res = self::select($q); if ($strict && count($res) != 1) { - Debug::erreur("Un rang de la base de données a été demmandé, mais, soit aucun rang correspondant aux critères n'a été trouvé, soit plusieurs ont été trouvés."); + Debug("erreur", "Un rang de la base de données a été demmandé, mais, soit aucun rang correspondant aux critères n'a été trouvé, soit plusieurs ont été trouvés."); return null; } if (count($res) == 0) { - Debug::erreur("Un rang de la base de données a été demmandé, mais, aucun rang correspondant aux critères n'a été trouvé."); + Debug("erreur", "Un rang de la base de données a été demmandé, mais, aucun rang correspondant aux critères n'a été trouvé."); } return $res[0][0]; } public static function modify($q) { - debug::sql($q . ";"); - mysql_unbuffered_query($q . ";", self::get()) or Debug::erreur_sql(); + Debug("sql", $q . ";"); + mysql_unbuffered_query($q . ";", self::get()) or Debug("erreur_sql"); // http://stackoverflow.com/questions/621369/sql-insert-and-catch-the-id-auto-increment-value return mysql_insert_id(self::get()); } @@ -154,7 +154,7 @@ class BDD { public static function close() { if (is_resource(self::$handle)) { self::commit(); - mysql_close(self::get()) or Debug::erreur_sql(); + mysql_close(self::get()) or Debug("erreur_sql"); self::$handle = null; } } @@ -178,8 +178,8 @@ class BDDCell { public function valeur() { return $this->valeur; } - public function __toString() { - return "".$this->valeur; + public function toString() { + return toString($this->valeur); } } diff --git a/cms2/code/configuration.php5 b/cms2/code/configuration.php5 index 5dcc588..6942fbf 100644 --- a/cms2/code/configuration.php5 +++ b/cms2/code/configuration.php5 @@ -10,7 +10,7 @@ class Config { public static function get($nom) { if (!isset(self::$config[$nom])) { - // Utilisation de die() plutôt que de Debug::erreur car Debug n'est peut-être pas encore chargé. + // Utilisation de die() plutôt que de $Debug->erreur car Debug n'est peut-être pas encore chargé. echo "Variable de configuration manquante : $nom"; die(); } diff --git a/cms2/code/debug.php5 b/cms2/code/debug.php5 index 89b5f9e..61a142a 100644 --- a/cms2/code/debug.php5 +++ b/cms2/code/debug.php5 @@ -1,6 +1,6 @@ 'Erreur', "niy" => 'Pas encore implémenté', @@ -20,11 +20,11 @@ class Debug { public static $toutes_erreurs = false; // true <=> ignorer le filtre. public static $erreurs = array(); - public static function __callStatic($nom, $args) { + public function __call($nom, $args) { if (!array_key_exists($nom, self::$types_erreur)) { - self::erreur("Type d'erreur inconnu : " . $nom . "\nArguments de Debug::$nom() : " . var_export($args, true)); + self::erreur("Type d'erreur inconnu : " . $nom . "\nArguments de Debug->$nom : " . var_export($args, true)); } elseif (count($args) != 1) { - self::erreur("Mauvais nombre d'arguments pour Debug::$nom().\nArguments : " . var_export($args, true)); + self::erreur("Mauvais nombre d'arguments pour Debug->$nom.\nArguments : " . var_export($args, true)); } else { self::push($nom, $args[0]); } @@ -67,8 +67,15 @@ class Debug { } } +function Debug($fn) { + $args = func_get_args(); + array_shift($args); + $d = new _Debug(); + call_user_func_array(array($d, $fn), $args); +} + function niy($name) { - Debug::niy($name); + Debug("niy", $name); } ?> \ No newline at end of file diff --git a/cms2/code/document.php5 b/cms2/code/document.php5 index dfb930b..b16b824 100644 --- a/cms2/code/document.php5 +++ b/cms2/code/document.php5 @@ -112,7 +112,7 @@ class ElementDocument { $max = 0; foreach (self::$types[$type]["attributs_oblig"] as $i => $nom) { if (!isset($args[$i])) { - Debug::erreur("Argument manquant : $nom pour " . $elem->type); + Debug("erreur", "Argument manquant : $nom pour " . $elem->type); } $elem->attr($nom, $args[$i]); $max = $i; @@ -142,7 +142,7 @@ class ElementDocument { } elseif (self::has_widget($fn)) { return $this->créer_widget($fn, $args); } else { - Debug::erreur("Impossible d'ajouter un élément $fn à " . $this->type); + Debug("erreur", "Impossible d'ajouter un élément $fn à " . $this->type); return null; } } @@ -188,98 +188,98 @@ ElementDocument::add_type("text", "", "text"); -ElementDocument::add_widget("titre", function($d, $cell){ +ElementDocument::add_widget("titre", create_function('$d, $cell', ' // renvoie un

ou un selon les droits - $d->header()->title()->text("".$cell); + $d->header()->title()->text(toString($cell)); // TODO : modification si on a les droits. - $d->article()->hX()->text("".$cell); - }); + $d->article()->hX()->text(toString($cell)); + ')); -ElementDocument::add_widget("en_tete", function($d, $cell_titre, $cell_description){ +ElementDocument::add_widget("en_tete", create_function('$d, $cell_titre, $cell_description', ' $d->w_titre($cell_titre); $d->w_description($cell_description); - }); + ')); -ElementDocument::add_widget("description", function($d, $cell){ +ElementDocument::add_widget("description", create_function('$d, $cell', ' // TODO : modification si on a les droits. - return $d->article()->p()->text("".$cell); - }); + return $d->article()->p()->text(toString($cell)); + ')); -ElementDocument::add_widget("field", function($d, $cell){ +ElementDocument::add_widget("field", create_function('$d, $cell', ' $f = $d->span("field"); - $f->text("NIY : " . $cell); + $f->text("NIY : " . toString($cell)); return $f; - }); + ')); -ElementDocument::add_widget("text_line", function($d, $cell){ +ElementDocument::add_widget("text_line", create_function('$d, $cell', ' // TODO : modification si on a les droits. - return $d->text("".$cell); - }); + return $d->text(toString($cell)); + ')); -ElementDocument::add_widget("text_nix", function($d, $cell){ +ElementDocument::add_widget("text_nix", create_function('$d, $cell', ' // Texte naze (sans espaces etc.) à la *nix. // TODO : modification si on a les droits. // TODO : vérifier que ça match [a-zA-Z][-a-zA-Z0-9_]* - return $d->text("".$cell); - }); + return $d->text(toString($cell)); + ')); -ElementDocument::add_widget("text_rich", function($d, $cell){ +ElementDocument::add_widget("text_rich", create_function('$d, $cell', ' // TODO : modification si on a les droits. // TODO : rendu du texte riche. - return $d->p()->text("".$cell); - }); + return $d->p()->text(toString($cell)); + ')); -ElementDocument::add_widget("bool", function($d, $cell){ +ElementDocument::add_widget("bool", create_function('$d, $cell', ' // checkbox return $d->text("Not Implemented Yet : w_bool($cell)"); - }); + ')); -ElementDocument::add_widget("bouton", function($d, $texte, $page_callback, $ressource_callback, $action_callback){ +ElementDocument::add_widget("bouton", create_function('$d, $texte, $page_callback, $ressource_callback, $action_callback', ' // afficher un input[type=button] // lors du clic, appeller $action_callback sur $page_callback/?res=$ressource_callback ? return $d->text("Not Implemented Yet : w_bouton($texte, $page_callback, $ressource_callback, $action_callback)"); - }); + ')); // Le widget w_img_file doit gérer le stockage de l'image dans un dossier, // la création de la miniature et le stockage dans la BDD du chemin vers l'image. -ElementDocument::add_widget("img_file", function($d, $cell_description, $cell_img){ +ElementDocument::add_widget("img_file", create_function('$d, $cell_description, $cell_img', ' // TODO : modification si on a les droits. // input[file] et - $img = $d->img("".$cell_description, "".$cell_img); + $img = $d->img(toString($cell_description), toString($cell_img)); $d->w_description($cell_description); return $img; - }); + ')); -ElementDocument::add_widget("date", function($d, $select){ +ElementDocument::add_widget("date", create_function('$d, $select', ' // affichage localisé. return $d->text("Not Implemented Yet : date($select)"); - }); + ')); -ElementDocument::add_widget("liste", function($d, $list_cells, $function_formattage_elements) { +ElementDocument::add_widget("liste", create_function('$d, $list_cells, $function_formattage_elements', ' $ul = $d->ul(); foreach ($list_cells as $cell) { $li = $ul->li(); $function_formattage_elements($cell, $li); } return $ul; - }); + ')); -ElementDocument::add_widget("tableau", function($d, $select, $function_formattage_elements) { +ElementDocument::add_widget("tableau", create_function('$d, $select, $function_formattage_elements', ' $t = $d->table(); $tr = $t->tbody()->tr(); $tr->td()->text("Not Implemented Yet"); return $t; - }); + ')); ?> \ No newline at end of file diff --git a/cms2/code/main.php5 b/cms2/code/main.php5 index ecb4cbf..e2d3c39 100644 --- a/cms2/code/main.php5 +++ b/cms2/code/main.php5 @@ -22,7 +22,7 @@ function main() { $rendu = $page->rendu($res); BDD::close(); - $rendu->erreurs()->litteral(Debug::afficher()); + $rendu->erreurs()->litteral(_Debug::afficher()); $rendu = $rendu->to_XHTML_5(); echo $rendu; diff --git a/cms2/code/page.php5 b/cms2/code/page.php5 index 73de66c..399bcb6 100644 --- a/cms2/code/page.php5 +++ b/cms2/code/page.php5 @@ -70,7 +70,7 @@ function type_liens($groupe, $type = null) { mPage::$limitation_infos_module = $lim; } else { if ($type === null) { - Debug::erreur('fonction type_liens() : le paramètres $type est obligatoire.'); + Debug("erreur", 'fonction type_liens() : le paramètres $type est obligatoire.'); } // TODO : ... jusqu'ici (mPage::$modules[$m]['types_enfants'] peut être factorisé aussi (pas pour attribut)). mPage::$modules[$m]['type_liens'][$groupe] = $type; @@ -90,10 +90,10 @@ function attribut($nom, $type = null, $defaut = null) { mPage::$limitation_infos_module = $lim; } else { if ($type === null || $defaut === null) { - Debug::erreur('fonction attribut() : les paramètres $type et $defaut est obligatoire.'); + Debug("erreur", 'fonction attribut() : les paramètres $type et $defaut est obligatoire.'); } if (!Document::has_widget("w_" . $type)) { - Debug::erreur("L'attribut $nom a le type $type, mais aucun widget w_$type n'existe."); + Debug("erreur", "L'attribut $nom a le type $type, mais aucun widget w_$type n'existe."); } mPage::$modules[$m]['attributs'][$nom] = array("global" => false, "type" => $type, "defaut" => $defaut); } @@ -392,7 +392,7 @@ class mPage { public function set_prop_direct($nom, $val) { // Modifie l'attribut "$nom" dans la BDD. $update_table = (self::est_propriete_globale($nom)) ? "_pages" : $this->nom_module(); - $update = "update " . BDD::table($update_table) . " set $nom = '" . mysql_real_escape_string("".$val) . "' where _uid_page = " . $this->uid(); + $update = "update " . BDD::table($update_table) . " set $nom = '" . mysql_real_escape_string(toString($val)) . "' where _uid_page = " . $this->uid(); BDD::unbuf_query($update); if ($nom != "date_modification") { $this->date_modification = time(); diff --git a/cms2/code/util.php5 b/cms2/code/util.php5 index 3998ed8..aaeb329 100644 --- a/cms2/code/util.php5 +++ b/cms2/code/util.php5 @@ -37,6 +37,14 @@ function applyXSLT($xml, $xslt_file) { return $xslt->transformToXML($dom); } +function toString($obj) { + if (is_object($obj) && method_exists($obj, "toString")) { + return $obj->toString(); + } else { + return "".$obj; + } +} + /**** Début PATH ****/ // http://www.liranuna.com/php-path-resolution-class-relative-paths-made-easy/ diff --git a/cms2/index.php b/cms2/index.php new file mode 100644 index 0000000..f1b1c7b --- /dev/null +++ b/cms2/index.php @@ -0,0 +1 @@ + diff --git a/cms2/modules/admin/admin-utilisateurs.php5 b/cms2/modules/admin/admin-utilisateurs.php5 index f7f510c..146e9d3 100644 --- a/cms2/modules/admin/admin-utilisateurs.php5 +++ b/cms2/modules/admin/admin-utilisateurs.php5 @@ -18,9 +18,9 @@ class mAdminListeUtilisateurs extends mPage { public function res_h_page($d) { $d->w_titre("Utilisateurs"); - $l = $d->article()->w_tableau($this->enfants(true, "+nom +prenom"), function($e, $tr) { + $l = $d->article()->w_tableau($this->enfants(true, "+nom +prenom"), create_function('$e, $tr', ' $e->rendu("h_admin", $tr); - }); + ')); $nouveau = $l->tbody(0)->tr()->td(6); $nouveau->text("Nouvel utilisateur"); return $d; @@ -29,9 +29,9 @@ class mAdminListeUtilisateurs extends mPage { public function res_h_liste_mots_de_passe($d) { $d->w_titre("Liste de mots de passe."); - $l = $d->article()->w_liste($this->enfants("groupe_permissions = 'utilisateurs'", "+nom +prenom"), function($e, $li) { + $l = $d->article()->w_liste($this->enfants("groupe_permissions = 'utilisateurs'", "+nom +prenom"), create_function('$e, $li', ' $e->rendu("h_admin_mdp", $li); - }); + ')); return $d; } } diff --git a/cms2/modules/galerie/galerie.php5 b/cms2/modules/galerie/galerie.php5 index b7539d2..f3caee6 100644 --- a/cms2/modules/galerie/galerie.php5 +++ b/cms2/modules/galerie/galerie.php5 @@ -1,17 +1,26 @@ "; + var_dump($module); + var_dump($cvars); + echo "\n\n\n"; + $cvars = get_class_vars("mGalerieBase"); + var_dump($cvars); + echo ""; + exit;*/ ressources_statiques("i_icone_nouvelle_page c_style"); ressources_dynamiques("h_page h_miniature h_mini_miniature"); - type_liens("enfants", $module::$type_enfants); + type_liens("enfants", $cvars['type_enfants']); type_liens("liens", "*"); - attribut("titre", "text_line", $module::$texte_titre); + attribut("titre", "text_line", $cvars['texte_titre']); attribut("description", "text_rich", ""); attribut("publier", "bool", "true"); attribut("apercu", "bool", "false"); // TODO ! @@ -27,10 +36,10 @@ abstract class mGalerieBase extends mPage { public function res_h_page($d) { $d->w_en_tete($this->titre, $this->description); // En-tête standard. - $l = $d->article()->w_liste($this->enfants(true, "-date_creation"), function($e, $li) { + $l = $d->article()->w_liste($this->enfants(true, "-date_creation"), create_function('$e, $li', ' $a = $li->a($e->url()); $e->rendu("h_miniature", $a); - }); + ')); $nouveau = $l->li(); // TODO : nouveau devrait être un lien, bouton, ... $nouveau->span("miniature")->img("", $this->url("i_icone_nouvelle_page")); @@ -69,28 +78,28 @@ abstract class mGalerieBase extends mPage { } class mGalerieIndex extends mGalerieBase { - protected static $texte_titre = "Galerie"; - protected static $texte_nouvelle_page = "Nouvelle période"; - protected static $icone_nouvelle_page = "nouvelle_periode.png"; - protected static $type_enfants = "mGaleriePeriode"; + public static $texte_titre = "Galerie"; + public static $texte_nouvelle_page = "Nouvelle période"; + public static $icone_nouvelle_page = "nouvelle_periode.png"; + public static $type_enfants = "mGaleriePeriode"; } class mGaleriePeriode extends mGalerieBase { - protected static $texte_titre = "Période"; - protected static $texte_nouvelle_page = "Nouvel événement"; - protected static $icone_nouvelle_page = "nouvel_evenement.png"; - protected static $type_enfants = "mGalerieEvenement"; + public static $texte_titre = "Période"; + public static $texte_nouvelle_page = "Nouvel événement"; + public static $icone_nouvelle_page = "nouvel_evenement.png"; + public static $type_enfants = "mGalerieEvenement"; } class mGalerieEvenement extends mGalerieBase { - protected static $texte_titre = "Événement"; - protected static $texte_nouvelle_page = "Nouvelle photo"; - protected static $icone_nouvelle_page = "nouvelle_photo.png"; - protected static $type_enfants = "mGaleriePhoto"; + public static $texte_titre = "Événement"; + public static $texte_nouvelle_page = "Nouvelle photo"; + public static $icone_nouvelle_page = "nouvelle_photo.png"; + public static $type_enfants = "mGaleriePhoto"; } class mGaleriePhoto extends mGalerieBase { - protected static $texte_titre = "Photo"; + public static $texte_titre = "Photo"; public static function info($module) { ressources_statiques("c_style"); @@ -115,7 +124,7 @@ class mGaleriePhoto extends mGalerieBase { } public function res_h_page($d) { - $d->w_en_tete($this->titre, "".$this->description); // En-tête standard. + $d->w_en_tete($this->titre, toString($this->description)); // En-tête standard. $d->w_img_file($this->description, $this->i_image); return $d; } diff --git a/cms2/modules/nouveautes/nouveautes.php5 b/cms2/modules/nouveautes/nouveautes.php5 index 9053a50..0552ad8 100644 --- a/cms2/modules/nouveautes/nouveautes.php5 +++ b/cms2/modules/nouveautes/nouveautes.php5 @@ -21,12 +21,12 @@ class mNouveautes extends mPage { public function res_h_page($d) { $d->w_en_tete(); // En-tête standard. - $l = $d->article()->w_liste($this->enfants(true, "-date_creation", 10), function($e, $li) { + $l = $d->article()->w_liste($this->enfants(true, "-date_creation", 10), create_function('$e, $li', ' $a = $li->a($e->uid()); - // TODO : h_miniature_nouveautes s'il existe sinon h_miniature sinon juste un lien. - // Comme ça le h_miniature_nouveautes d'une période de la galerie, c'est 3 ou 4 images alors que normalement c'en est juste une seule. + // TODO : h_miniature_nouveautes s\'il existe sinon h_miniature sinon juste un lien. + // Comme ça le h_miniature_nouveautes d\'une période de la galerie, c\'est 3 ou 4 images alors que normalement c\'en est juste une seule. $e->rendu("h_miniature", $a); - }); + ')); $nouveau = $l->li(); $nouveau->span("miniature")->img("", $this->url("i_icône_nouvelle_page")); $nouveau->span("action")->text("Ajouter un article aux nouveautés.");