Objets

Ici on raconte la vie des objets pour .node. Ca va avec le ticket #24.

Avant propos

"Style d'objet à créer/utiliser" ... c'est à dire la facon de construire les objets.

Dès le départ on a une question à se poser, c'est le passage du $db dans l'objet, 2 options :

  • On file une référence au constructeur sur le DB qui existe deja
  • On laisse l'objet se créer son $db lui-même (et utiliser la "puissance" du singloton/factory qu'est DB::connect)

L'avantage de la première méthode est d'être simple, mais on doit passer a chaque fois ce parametre $db à la création de l'objet, ce qui oblige a creer l'objet $db avant l'appel à la classe. L'avantage du second est d'être indépendant de son "context", ... au cas ou il n'y a pas de DB, il n'en crée pas. S'il y a déjà, c'est réutilisé. On peut donc utiliser l'objet sans se soucier de cette partie. Par contre, il faut toujours récuperer les params de connexion (par un global par exemple), ajuster les options, vérifier que le $db est bien créer etc ... pour chaque objet (ce qui ne va pas dans le sens de la factorisation voulu). Pour corriger ca, on peut imaginer une super classe qui contiendrait la fonction de connexion à la DB. Et chaque class devant utiliser la DB en hériterait.

Communauté

On a besoin d'afficher:

  • Sa photo et sa miniature (ptet plusieurs a terme)
  • Son nom
  • Son proprio
  • Ses topics d'un forum
  • Ses evenements
  • Ses utilisateurs
  • Ses communautés voisines
  • Sa catégorie
  • Ses infos a la con (pays, date de création, modération ou non)

On a besoin d'interagir avec les objets:

  • Forum (et ce qui en découle, genre Topic tout ca si on va aussi loin que ca dans les objets)
  • Event (idem)
  • Category
  • User
  • Community

Méthodes publiques à écrire (je pars du principe que l'on pourra carrement donner l'objet à Smarty pour qu'il appelle les methodes si on se demerde bien:

class MappingDB {
    var $db;        // The PEAR DB Object
    var $db_table;  // DB Table to map
    var $table_fields; // Table field that can be modified directly by setProp

    function setProp($name, $value) {
        if(in_array($name, $this->table_fields) {
            $this->db->query('UPDATE ! SET !=?', array($this->db_table, $name, $value));
        }
    }
}
class Community extends MappingDB {
    // FIXME
    var $db_table = 'community';
    var $db_fields = array('name', 'description', 'moderated', 'country'); // TODO later: Add a language field in the DB

    function Community(&$db) {
        $this->db = $db;
    }
}

... continuez ici pour les autres classes.