diff --git a/cms2/code/bdd.php b/cms2/code/bdd.php index da9af33..6a4c48d 100644 --- a/cms2/code/bdd.php +++ b/cms2/code/bdd.php @@ -1,19 +1,5 @@ + // Cette fonction sera appellée lors de l'initialisation de la BDD. + self::modify("replace into " . self::table("pages") . " values(1, '0', '0', 'true', 'racine', '', 'mGalerieIndex', 'true')"); + self::modify("replace into " . self::table("pages") . " values(2, '0', '0', 'true', '', 'periode-1', 'mGaleriePeriode', 'true')"); + self::modify("replace into " . self::table("pages") . " set uid_page = 3, date_creation = '0', date_modification = '0', publier = 'true', nom_systeme = '', composant_url = 'periode-2', type = 'mGaleriePeriode', dans_nouveautes = 'false'"); + self::modify("replace into " . self::table("liens") . " values(1, 2, 'enfants')"); + self::modify("replace into " . self::table("liens") . " values(1, 3, 'enfants')"); + self::modify("replace into " . self::table("mGalerieIndex") . " values(1, 'Galerie', 'une galerie')"); + self::modify("replace into " . self::table("mGaleriePeriode") . " values(2, 'Periode 1', 'été')"); + self::modify("replace into " . self::table("mGaleriePeriode") . " values(3, 'Periode 2', 'hiver')"); } public static function begin_transaction() { @@ -113,7 +106,7 @@ class BDD { debug::info("sql : " . $q); $qres = mysql_query($q, BDD::get()) or Debug::sqlerror(); $ret = array(); - while ($row = mysql_fetch_array($qres)) { + while ($row = mysql_fetch_assoc($qres)) { $ret[] = $row; } return $ret; @@ -137,53 +130,4 @@ class BDD { } } -/* - -class DB extends Selectable { - private static $handle = null; - public function __construct() { - if (self::$handle === null) { - niy("Connexion à la BDD"); - } else { - return self::$handle; - } - } -} - -class Selectable { - // TODO : comment faire un select sur la table page ? - // TODO : comment créer une nouvelle page ? - function select($qw_champs, $qw_ordre = "", $limit = 0, $offset = 0) { - // Retourne un selectable, qui a une méthode run() (la méthode run renvoie la liste d'éléments. Chaque élément a une méthode set()). - // Une limit de 0 signifie qu'on prend tous les éléments à partir de $offset. - } - - function set($valeur, $qw_champs) { - // Appelle set(valeur) sur chaque élément de $this->select(champs, ordre, 0, 0)->run() - } - - function set_with_uid($valeur, int $uid) { - // Appelle set(valeur) sur la ligne de la base de données avec cet uid. - // Les
des pages ont des champ et un bouton submit. - // Lorsqu'on active ce submit, les lignes correspondant aux _uid_ dans la base de données reçoivent la bonne valeur. - } - - function sql() { - } - - function add_setter($condition, $fonction_setter) { - // Si on fait un set qui remplit la condition, la fonction_setter est appellée au lieu de modifier directement la bdd. - // Condition peut être : - // true // toujours appellé (pour les permissions, les dates de modification etc.). - // type de page parente // lorsqu'on récupère la liste des enfants d'une page de ce type. - // type de page, nom attribut // lorsqu'on récupère cet attribut d'une page de ce type. - } - - function add_getter($condition, $fonction_getter) { - // Comme add_setter(). - } -} - -*/ - ?> \ No newline at end of file diff --git a/cms2/code/document.php b/cms2/code/document.php index e5308bb..44c3913 100644 --- a/cms2/code/document.php +++ b/cms2/code/document.php @@ -225,6 +225,7 @@ ElementDocument::add_widget("bool", function($d, $select){ }); +// 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, $select){ // input[file] et return $d->text("Not Implemented Yet : w_img_file($select)"); diff --git a/cms2/code/main.php b/cms2/code/main.php index 4b0152e..3a0c40f 100644 --- a/cms2/code/main.php +++ b/cms2/code/main.php @@ -7,17 +7,18 @@ function main() { $bdd = BDD::get(); BDD::reset(); - echo ""; + + $r = Page::page_uid(1); + var_dump($r); - $g = new mAdminListeUtilisateurs(); - - $p = $g->rendu(); + $p = $r->rendu(); echo "
";
 	echo htmlspecialchars($p->to_XHTML_5());
 	echo "
"; BDD::close(); Debug::afficher(); + echo ""; } ?> \ No newline at end of file diff --git a/cms2/code/page.php b/cms2/code/page.php index 087bb6e..e658286 100644 --- a/cms2/code/page.php +++ b/cms2/code/page.php @@ -152,13 +152,12 @@ class Page { attribut("type", "text_no_space", "mSiteIndex"); } - private $parent = null; - public function parent() { - return $this->parent; + public function nom_module() { + return get_class($this); } public function module() { - return self::$modules[get_class($this)]; + return self::$modules[$this->nom_module()]; } public function rendu($res = null, $d = null) { @@ -177,6 +176,7 @@ class Page { public function url($ressource = null) { // Renvoie toute l'url (de la ressource principale ou de $ressource). niy("url"); + return ""; } public function composant_url() { @@ -203,40 +203,21 @@ class Page { // limit = null || limit = 0 => pas de limite // offset = null => offset = 0 - // Deux possibilités : - // 1) On select tous les rangs qui correspondent à une des $condition, - // puis on group by having count(uid_page) = . - // 2) On met chaque "type" (galerie-index, ...) dans une table séparée, - // et on a une table des types. On select dans cette table des types - // les tables qui ont les champs sur lesquels portent les conditions, - // puis on construit une requête comme suit : - // select * from (select uid_page, prop_cond_1, prop_cond_2 from table_1) - // union (select uid_page, prop_cond_1, prop_cond_2 from table_2) - // union (... table_3) - // ... where prop_cond_1 = val_cond_1 and prop_cond_2 = val_cond_2; - - // Tous les enfants - niy("enfants__"); - $select = "select uid_page from " . BDD::table("enfants") . " where uid_page_parent = " . $this->uid(); - - if ($condition !== true) { - // Toutes les propriétés des enfants - $select = "select$distinct uid_page from " . BDD::table("proprietes") . " where uid_page in (" . $select . ")"; - // Liste des conditions : - $select .= "and ("; - $firstcond = true; - foreach ($conditions as $c) { - if (!$firstcond) { - $select .= " or "; - } - $select .= "(nom = '" . mysql_real_escape_string($c["cle"]) . "' and valeur = '" . mysql_real_escape_string($c["valeur"]) . "')"; - $firstcond = false; - } - $select .= ") group by uid_page having count(uid_page) = " . count($conditions); + niy("enfants"); + // TODO : "natural join" + echo "uid : "; + var_dump($this->uid()); + $select = "select uid_page_vers from " + . BDD::table("liens") + . " join " . BDD::table("pages") . " on uid_page = uid_page_vers " + . " natural join " . BDD::table($this->nom_module()) + . " where groupe = 'enfants' and uid_page_de = " . $this->uid() . ";"; + $res = array(); + foreach (BDD::select($select) as $row) { + array_push($res, self::page_uid($row["uid_page_vers"])); } - echo "Page::enfants : result of select : "; - var_dump(BDD::select($select . ";")); + return $res; } public function ajouter_enfant($type, $groupe = "main") { @@ -255,7 +236,26 @@ class Page { // select from pages where nomSysteme = $nom limit 1 niy("page_systeme"); } + + public static function page_uid($uid) { + $select = "select type from " . BDD::table("pages") . " where uid_page = " . $uid . ";"; + $type = BDD::select($select); + if (count($type) != 1) { + Debug::error("La page avec l'uid $uid n'a pas pu être trouvée."); + return null; + } + $type = $type[0]["type"]; + $ret = new $type(); + $ret->uid = $uid; + return $ret; + } + public function get_permissions_prop($prop) { + niy("get_permissions_prop"); + } + public function get_permissions_enfants($groupe) { + niy("get_permissions_enfants"); + } public function if_perm($action, $nom_propriété) { // @param $action = suite de lettre parmi les suivantes : // R = Read prop diff --git a/cms2/modules/admin/admin-utilisateurs.php b/cms2/modules/admin/admin-utilisateurs.php index 9ca4e92..fe04a71 100644 --- a/cms2/modules/admin/admin-utilisateurs.php +++ b/cms2/modules/admin/admin-utilisateurs.php @@ -18,7 +18,7 @@ class mAdminListeUtilisateurs extends Page { public function res_h_page($d) { $d->w_titre("Utilisateurs"); - $l = $d->article()->w_tableau($this->enfants(true, "nom asc prenom asc"), function($e, $tr) { + $l = $d->article()->w_tableau($this->enfants(true, "+nom +prenom"), function($e, $tr) { $e->rendu("h_admin", $tr); }); $nouveau = $l->tbody(0)->tr()->td(6); @@ -29,7 +29,7 @@ class mAdminListeUtilisateurs extends Page { 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 = utilisateurs", "nom asc prenom asc"), function($e, $li) { + $l = $d->article()->w_liste($this->enfants("u_groupe = 'utilisateurs'", "+nom +prenom"), function($e, $li) { $e->rendu("h_admin_mdp", $li); }); return $d; diff --git a/cms2/modules/galerie/galerie.php b/cms2/modules/galerie/galerie.php index 1ec244a..0423249 100644 --- a/cms2/modules/galerie/galerie.php +++ b/cms2/modules/galerie/galerie.php @@ -25,8 +25,8 @@ abstract class mGalerieBase extends Page { } public function res_h_page($d) { - $d->w_en_tete(); // En-tête standard. - $l = $d->article()->w_liste($this->enfants(true, "date_creation desc"), function($e, $li) { + $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) { $a = $li->a($e->uid()); $e->rendu("h_miniature", $a); }); @@ -51,10 +51,12 @@ abstract class mGalerieBase extends Page { } public function res_h_mini_miniature($d) { - $a = $this->enfants("@apercu = true", "date_creation desc", 1); - if ($a->size() != 1) - $a = $this->enfants(true, "date_creation desc", 1); - return $a->get(0)->rendu("h_mini_miniature", $d);; + $a = $this->enfants("apercu = 'true'", "-date_creation", 1); // TODO : l'aperçu devrait être défini par le parent => ajouter un attribut "virtuel". + if (count($a) != 1) + $a = $this->enfants(true, "-date_creation", 1); + if (count($a) != 1) + return; // TODO : aucune photo + return $a[0]->rendu("h_mini_miniature", $d);; } public function set_dans_nouveautes($val) { diff --git a/cms2/modules/nouveautes/nouveautes.php b/cms2/modules/nouveautes/nouveautes.php index d948bf9..31255f1 100644 --- a/cms2/modules/nouveautes/nouveautes.php +++ b/cms2/modules/nouveautes/nouveautes.php @@ -7,6 +7,7 @@ class mNouveautes extends Page { groupes_enfants("sources"); attribut("titre", "text_line", "Nouveautés"); attribut("description", "text_rich", ""); + attributs_globaux("dans_nouveautes"); } public function res_i_icône_nouvelle_page() { @@ -20,7 +21,7 @@ class mNouveautes extends Page { public function res_h_page($d) { $d->w_en_tete(); // En-tête standard. - $l = $d->article()->w_liste($this->enfants(true, "date_creation desc", 10), function($e, $li) { + $l = $d->article()->w_liste($this->enfants(true, "-date_creation", 10), 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.