diff --git a/wiki/macro/PagesPerso.py b/wiki/macro/PagesPerso.py index 4f331413..80e9a27d 100644 --- a/wiki/macro/PagesPerso.py +++ b/wiki/macro/PagesPerso.py @@ -1,6 +1,12 @@ # -*- encoding: utf-8 -*- +# Macro d'affichage des pages perso +# Update par Chirac : cette macro n'utilise plus le .info dans les home +# A la place, une table dans la base pg gérée par django coté intranet +# Désormais, seules les pages perso référencées dans la base sont affichées +# Le référencement constitue un choix volontaire, de l'utilisateur via l'intranet import os +import psycopg2 class AccountList: home = "/home" @@ -12,10 +18,15 @@ class AccountList: def comptes(self): """Retourne la liste des comptes""" - return filter(lambda x: os.path.isdir(u"/home/%s/www" % x) and not os.path.islink(u"/home/%s/www" % x), - #return filter(lambda x: os.path.isdir(os.path.expanduser(u"~%s/www" % x)) and not os.path.islink(os.path.expanduser(u"~%s/www" % x)), - os.listdir(u"/home/mail")) - ### ^^^^^^ le code m'a tuer +# return filter(lambda x: os.path.isdir(u"/home/%s/www" % x) and not os.path.islink(u"/home/%s/www" % x), +# os.listdir(u"/home/mail")) + ### ^^^^^^ le code m'a tuer, trace de mooo + + #Désormais, seuls les pages perso qui sont dans la base sont référencées. + con = psycopg2.connect(database="django", user="crans", host="pgsql.adm.crans.org") + cur = con.cursor() + cur.execute("SELECT login FROM pageperso_pageperso") + return cur.fetchall() def makeAnchor(self,letter): @@ -35,6 +46,7 @@ class AccountList: premiere_lettre = '' letter_list = [] for d in dirs: + d=d[0] if premiere_lettre != d[0]: premiere_lettre = d[0] letter_list.append(premiere_lettre) @@ -49,11 +61,12 @@ class AccountList: class Account: """Classe représentant la page perso d'une personne""" + _connexion = None + def __init__(self, home, login, www, url): """Instanciation avec le `login' de la personne""" self.login = login self.home = "%s/%s" % (home, login) - #self.home = #os.path.expanduser("~%s" % login) self.www = www self.url = url @@ -61,18 +74,21 @@ class Account: def info(self, champ): """Retourne le contenu du champ `champ' dans le fichier info""" if self._info == None: - try: - lignes = file("%s/.info" % self.home) - except IOError: - lignes = [] - # self._info est un dictionnaire qui reprend le contenu du .info - self._info = dict(map(lambda z: (unicode(z[0].lower(),"iso-8859-15"), - unicode(z[1],"iso-8859-15")), - filter(lambda w: len(w) == 2 and len(w[1]), - map(lambda x: map(lambda y: y.strip(), - x.split(":")), - lignes)))) + self._info = dict() + if not Account._connexion: +# con = psycopg2.connect(database="intranet-dev", user="dev", password="verysecure", host="vo.v4.adm.crans.org",port="5432") + con = psycopg2.connect(database="django", user="crans", host="pgsql.adm.crans.org") + Account._connexion = con + else: + con = Account._connexion + cur = con.cursor() + cur.execute("SELECT * FROM pageperso_pageperso WHERE login='%s' " % self.login ) + data = cur.fetchall() + if data: + for indice,item in enumerate(data[0]): + self._info[cur.description[indice][0]]=item.decode('utf-8') + if self._info.has_key(champ.lower()): return self._info[champ.lower()] @@ -101,8 +117,8 @@ class Account: u'' % (self.url % self.login), u'%s' % (self.logo(), self.login), u'
', - self.info("nom") and u'%s
' % self.info("nom") or u'%s
' % self.login, - self.info("devise") and u'%s' % self.info("devise") or u'', + self.info("nom_site") and u'%s
' % self.info("nom_site") or u'%s
' % self.login, + self.info("slogan") and u'%s' % self.info("slogan") or u'', u'' ] return u'\n'.join(html)