# HG changeset patch # User Arthur Lutz # Date 1234368039 -3600 # Node ID 5ecf67090c2fe6aafb0560955462290838811a3d # Parent 178fc96fd1482c2fc540ef51b03edf0490ee3623# Parent 3ca2cbf1e2ce14607695778ed9b5f20db2fbef5e merge diff -r 3ca2cbf1e2ce -r 5ecf67090c2f common/selectors.py --- a/common/selectors.py Wed Feb 11 15:49:17 2009 +0100 +++ b/common/selectors.py Wed Feb 11 17:00:39 2009 +0100 @@ -161,13 +161,20 @@ def paginated_rset(cls, req, rset, *args, **kwargs): """accept result sets with more rows than the page size """ - if rset is None or len(rset) <= req.property_value('navigation.page-size'): + page_size = kwargs.get('page_size') + if page_size is None: + page_size = req.form.get('page_size') + if page_size is None: + page_size = req.property_value('navigation.page-size') + else: + page_size = int(page_size) + if rset is None or len(rset) <= page_size: return 0 return 1 largerset_selector = deprecated_function(paginated_rset) @lltrace -def sorted_rset(cls, req, rset, row=None, col=None): +def sorted_rset(cls, req, rset, row=None, col=None, **kwargs): """accept sorted result set""" rqlst = rset.syntax_tree() if len(rqlst.children) > 1 or not rqlst.children[0].orderby: diff -r 3ca2cbf1e2ce -r 5ecf67090c2f entities/authobjs.py --- a/entities/authobjs.py Wed Feb 11 15:49:17 2009 +0100 +++ b/entities/authobjs.py Wed Feb 11 17:00:39 2009 +0100 @@ -93,6 +93,13 @@ """ return self.matching_groups(group) == 1 + def is_anonymous(self): + """ checks if user is an anonymous user""" + #FIXME on the web-side anonymous user is detected according + # to config['anonymous-user'], we don't have this info on + # the server side. + return self.groups == frozenset(('guests', )) + def owns(self, eid): if hasattr(self.req, 'unsafe_execute'): # use unsafe_execute on the repository side, in case diff -r 3ca2cbf1e2ce -r 5ecf67090c2f server/repository.py --- a/server/repository.py Wed Feb 11 15:49:17 2009 +0100 +++ b/server/repository.py Wed Feb 11 17:00:39 2009 +0100 @@ -490,7 +490,7 @@ session = self.internal_session() try: if session.execute('EUser X WHERE X login %(login)s', {'login': login}): - return + return False # we have to create the user user = self.vreg.etype_class('EUser')(session, None) if isinstance(password, unicode): @@ -505,6 +505,7 @@ session.commit() finally: session.close() + return True def connect(self, login, password, cnxprops=None): """open a connection for a given user diff -r 3ca2cbf1e2ce -r 5ecf67090c2f web/component.py --- a/web/component.py Wed Feb 11 15:49:17 2009 +0100 +++ b/web/component.py Wed Feb 11 17:00:39 2009 +0100 @@ -73,6 +73,19 @@ selected_page_link_templ = u'%s' previous_page_link_templ = next_page_link_templ = page_link_templ no_previous_page_link = no_next_page_link = u'' + + @classmethod + def selected(cls, req, rset, row=None, col=None, page_size=None, **kwargs): + """by default web app objects are usually instantiated on + selection according to a request, a result set, and optional + row and col + """ + instance = super(NavigationComponent, cls).selected(req, rset, row, col, **kwargs) + if page_size is not None: + instance.page_size = page_size + elif 'page_size' in req.form: + instance.page_size = int(req.form['page_size']) + return instance def __init__(self, req, rset): super(NavigationComponent, self).__init__(req, rset) diff -r 3ca2cbf1e2ce -r 5ecf67090c2f web/views/basetemplates.py --- a/web/views/basetemplates.py Wed Feb 11 15:49:17 2009 +0100 +++ b/web/views/basetemplates.py Wed Feb 11 17:00:39 2009 +0100 @@ -7,6 +7,8 @@ """ __docformat__ = "restructuredtext en" +from StringIO import StringIO + from logilab.mtconverter import html_escape from cubicweb import NoSelectableObject, ObjectNotFound @@ -114,6 +116,7 @@ def call(self): view, rset = self._select_view_and_rset() req = self.req + self.nav_html = StringIO() # update breadcrumps **before** validating cache, unless the view # specifies explicitly it should not be added to breadcrumb or the # view is a binary view @@ -162,7 +165,9 @@ self.req, self.rset) if etypefilter and etypefilter.propval('visible'): etypefilter.dispatch(w=self.w) - self.pagination(self.req, self.rset, self.w, not (view and view.need_navigation)) + self.pagination(self.req, self.rset, self.nav_html.write, + not (view and view.need_navigation)) + self.w(_(self.nav_html.getvalue())) self.w(u'
\n') def template_html_header(self, content_type, page_title, additional_headers=()): @@ -198,6 +203,7 @@ def template_footer(self, view=None): self.w(u'
\n') # close id=contentmain + self.w(_(self.nav_html.getvalue())) self.w(u'\n') # closes id=pageContent self.content_footer(view) self.w(u'\n') diff -r 3ca2cbf1e2ce -r 5ecf67090c2f web/views/navigation.py --- a/web/views/navigation.py Wed Feb 11 15:49:17 2009 +0100 +++ b/web/views/navigation.py Wed Feb 11 17:00:39 2009 +0100 @@ -36,15 +36,17 @@ while start < rset.rowcount: stop = min(start + page_size - 1, rset.rowcount - 1) blocklist.append(self.page_link(basepath, params, start, stop, - u'%s - %s' % (start+1, stop+1))) + self.index_display(start, stop))) start = stop + 1 w(u'') + + def index_display(self, start, stop): + return u'%s - %s' % (start+1, stop+1) - class SortedNavigation(NavigationComponent): """sorted navigation apply if navigation is needed (according to page size) and if the result set is sorted @@ -142,9 +144,11 @@ self.w(u'') -def limit_rset_using_paged_nav(self, req, rset, w, forcedisplay=False, show_all_option=True): +def limit_rset_using_paged_nav(self, req, rset, w, forcedisplay=False, + show_all_option=True, page_size = None): showall = forcedisplay or req.form.get('__force_display') is not None - nav = not showall and self.vreg.select_component('navigation', req, rset) + nav = not showall and self.vreg.select_component('navigation', req, rset, + page_size=page_size) if nav: # get boundaries before component rendering start, stop = nav.page_boundaries()