ajout objet utilisateur
[restcoda.git] / utilisateur.py
CommitLineData
ef44a84b
TN
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4#
5# Classe pour un utilisateur
6# (export de la vue auf_v_acces_users)
7
8from objetsql import ObjetSQL, ObjetSQLInconnuError
9from utils import dict_fetchone
10
11class utilisateur(ObjetSQL):
12 """objet utilisateur CODA"""
13 accept_like_filters = [ 'code', 'nom', 'nom_connexion', 'implantation' ]
14 def __init__(self, environ):
15 super(utilisateur, self).__init__(environ)
16 # TODO : voir si on peut faire le filtrage dans "objetsql"
17 # filtrage : on extrait la liste des filtres "acceptes" pour en faire des where
18 sqlwhere = []
19 for filter in self.accept_like_filters:
20 if filter in self.filters:
21 or_list = []
22 for v in self.filters[filter]:
23 or_list.append("%s like '%s'" % (filter,v.replace('*','%')))
24 sqlwhere.append('(' + ' or '.join(or_list) + ')')
25 # TODO : ajouter filtres min_*/max_*, avant/apres dans ce sqlwhere
26 self.sqlwhere = ' and '.join(sqlwhere)
27 # filtrage : valeur en cas de limite ("top n" en ODBC), 200 maxi
28 if 'limite' in self.filters:
29 self.sqllimit = min( int(self.filters['limite'][0]), 200 )
30 else:
31 self.sqllimit = 15
32 # TODO : ajouter filtres tri_asc/tri_desc
33 self.sqlorder = ''
34
35 def _get_index(self):
36 """renvoie une liste d'utilisateur"""
37 # connexion a la base de données
38 cursor = self.cursor()
39 if self.sqlwhere != '': self.sqlwhere = ' where ' + self.sqlwhere
40 # extraction des données
41 cursor.execute("select top %d * from auf_v_acces_users %s order by date_connexion desc" % ( self.sqllimit, self.sqlwhere ) )
42 items = []
43 while 1:
44 item = dict_fetchone( cursor )
45 if item == None: break
46 items.append(item)
47 index = {}
48 index['filtres'] = self.filters
49 index['utilisateurs'] = items
50 return index
51
52 def _get_utilisateur(self,code):
53 """renvoie un utilisateur"""
54 cursor = self.cursor()
55 if self.sqlwhere != '': self.sqlwhere = ' and ' + self.sqlwhere
56 cursor.execute("select top 1 * from auf_v_acces_users where (code like '%s') %s" % (code, self.sqlwhere))
57 utilisateur = dict_fetchone(cursor)
58 if utilisateur == None:
59 raise ObjetSQLInconnuError('utilisateur')
60 return utilisateur
61
62 def index(self):
63 """renvoie une liste d'utilisateurs formatée"""
64 template = self.template('utilisateur-index') # préparation du modèle
65 index = self._get_index( ) # extraction des documents concernés
66 output = template.render( index ) # formattage via le modèle
67 return self.outputformat, output
68
69 def show(self):
70 """renvoie un utilisateur formaté"""
71 code = self.environ['wsgiorg.routing_args'][1]['id'].replace('*','%').upper()
72 template = self.template( 'utilisateur' )
73 utilisateur = self._get_utilisateur( code )
74 output = template.render( utilisateur )
75 return self.outputformat, output
76