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'
' % (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)