From c26dbeaff1b32bce6df1a85057767add6f6e5ba5 Mon Sep 17 00:00:00 2001 From: Massimo Di Pierro Date: Sun, 1 Apr 2012 23:21:08 -0500 Subject: [PATCH] links in grid include referencing field (this is important for table with multiple reference fields) --- VERSION | 2 +- gluon/dal.py | 4 ++-- gluon/sqlhtml.py | 8 ++++++-- gluon/tools.py | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/VERSION b/VERSION index 595a5233..f36689f8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 1.99.7 (2012-04-01 11:25:03) dev +Version 1.99.7 (2012-04-01 23:20:43) dev diff --git a/gluon/dal.py b/gluon/dal.py index ef3a9ddf..5c1d9ff2 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -7129,7 +7129,7 @@ class Table(dict): def insert(self, **fields): if any(f(fields) for f in self._before_insert): return 0 ret = self._db._adapter.insert(self,self._listify(fields)) - ret and [f(fields) for f in self._after_insert] + ret and [f(fields,ret) for f in self._after_insert] return ret def validate_and_insert(self,**fields): @@ -7167,7 +7167,7 @@ class Table(dict): items = [self._listify(item) for item in items] if any(f(item) for item in items for f in self._before_insert):return 0 ret = self._db._adapter.bulk_insert(self,items) - ret and [[f(item) for item in items] for f in self._after_insert] + ret and [[f(item,ret[k]) for k,item in enumerate(items)] for f in self._after_insert] return ret def _truncate(self, mode = None): diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index 99b9a1a1..e21929d4 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -1930,6 +1930,7 @@ class SQLFORM(FORM): request.args[:]=args+[table._tablename] if links is None: links = {} if constraints is None: constraints = {} + field = None try: nargs = len(args)+1 previous_tablename,previous_fieldname,previous_id = \ @@ -1993,18 +1994,21 @@ class SQLFORM(FORM): else: del kwargs[key] for tablename,fieldname in table._referenced_by: + tb = db[tablename] + if not tb[fieldname].readable: continue id_field_name = table._id.name if linked_tables is None or tablename in linked_tables: args0 = tablename+'.'+fieldname links.append( - lambda row,t=T(db[tablename]._plural),nargs=nargs,args0=args0:\ + lambda row,t=T(tb._plural+' for '+fieldname),nargs=nargs,args0=args0:\ A(SPAN(t),_class=trap_class(),_href=URL( args=request.args[:nargs]+[args0,row[id_field_name]]))) grid=SQLFORM.grid(query,args=request.args[:nargs],links=links, links_in_grid=links_in_grid, user_signature=user_signature,**kwargs) if isinstance(grid,DIV): - breadcrumbs.append(A(T(table._plural),_class=trap_class(), + header = table._plural + (field and ' for '+field.name or '') + breadcrumbs.append(A(T(header),_class=trap_class(), _href=URL(args=request.args[:nargs]))) grid.insert(0,DIV(H3(*breadcrumbs),_class='web2py_breadcrumbs')) return grid diff --git a/gluon/tools.py b/gluon/tools.py index 2b7cb323..862f14fb 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -1884,7 +1884,7 @@ class Auth(object): cas_user = cas.get_user() if cas_user: next = cas.logout_url(next) - + current.session.auth = None current.session.flash = self.messages.logged_out redirect(next)