# HG changeset patch # User Katia Saurfelt # Date 1241095458 -7200 # Node ID 96a136073fd1b5e98a194a8930ad647270c32d40 # Parent 0be8605c411afa84080185471ad155a9957bfe6f improving preferencies : work in progress diff -r 0be8605c411a -r 96a136073fd1 web/views/management.py --- a/web/views/management.py Thu Apr 30 14:43:14 2009 +0200 +++ b/web/views/management.py Thu Apr 30 14:44:18 2009 +0200 @@ -13,14 +13,14 @@ from cubicweb.common.utils import UStringIO from cubicweb.common.view import AnyRsetView, StartupView, EntityView -from cubicweb.common.uilib import html_traceback, rest_traceback +from cubicweb.common.uilib import html_traceback, rest_traceback, ajax_replace_url from cubicweb.common.selectors import (yes, one_line_rset, accept_rset, none_rset, - chainfirst, chainall) + match_user_group, + chainfirst, chainall, ) from cubicweb.web import INTERNAL_FIELD_VALUE, eid_param, stdmsgs from cubicweb.web.widgets import StaticComboBoxWidget from cubicweb.web.form import FormMixIn - _ = unicode def begin_form(w, entity, redirectvid, redirectpath=None, msg=None): @@ -305,15 +305,28 @@ _('contentnavigation') -def make_togglable_link(nodeid, label, cookiename): +def make_togglable_link(nodeid, label): """builds a HTML link that switches the visibility & remembers it""" - action = u"javascript: toggle_and_remember_visibility('%s', '%s')" % \ - (nodeid, cookiename) + action = u"javascript: toggleVisibility('%s')" % nodeid return u'%s' % (action, label) def css_class(someclass): return someclass and 'class="%s"' % someclass or '' +### translations for SystemEpropertiesForm +_('navigation.combobox-limit') +_('navigation.page-size') +_('navigation.related-limit') +_('navigation.short-line-size') +_('ui.date-format') +_('ui.datetime-format') +_('ui.default-text-format') +_('ui.fckeditor') +_('ui.float-format') +_('ui.language') +_('ui.time-format') +_('open all') + class SystemEpropertiesForm(FormMixIn, StartupView): controller = 'edit' id = 'systemepropertiesform' @@ -345,7 +358,7 @@ def call(self, **kwargs): """The default view representing the application's index""" - self.req.add_js(('cubicweb.edition.js', 'cubicweb.preferences.js')) + self.req.add_js(('cubicweb.edition.js', 'cubicweb.preferences.js', 'cubicweb.ajax.js')) self.req.add_css('cubicweb.preferences.css') vreg = self.vreg values = self.defined_keys @@ -363,10 +376,11 @@ mainopts.setdefault(parts[0], []).append(key) # precompute form to consume error message for group, keys in mainopts.items(): - mainopts[group] = self.form(keys, False) + mainopts[group] = self.form(group, keys, False) + for group, objects in groupedopts.items(): for oid, keys in objects.items(): - groupedopts[group][oid] = self.form(keys, True) + groupedopts[group][oid] = self.form(group + '-' + oid, keys, True) w = self.w req = self.req @@ -377,28 +391,35 @@ for g, f in mainopts.iteritems()): status = css_class(self._group_status(group)) #'hidden' (collapsed), or '' (open) ? w(u'

%s

\n' % - (make_togglable_link('fieldset_' + group, label, - self._cookie_name(group)))) + (make_togglable_link('fieldset_' + group, label.capitalize()))) w(u'
' % (group, status)) - w(u'
') + w(u'
') w(form) w(u'
') + for label, group, objects in sorted((_(g), g, o) for g, o in groupedopts.iteritems()): status = css_class(self._group_status(group)) w(u'

%s

\n' % - (make_togglable_link('fieldset_' + group, label, - self._cookie_name(group)))) + (make_togglable_link('fieldset_' + group, label.capitalize()))) w(u'
' % (group, status)) - for label, oid, form in sorted((self.req.__('%s_%s' % (group, o)), o, f) - for o, f in objects.iteritems()): - w(u'
') - w(u'%s\n' % label) + + # create selection + sorted_objects = sorted((self.req.__('%s_%s' % (group, o)), o, f) + for o, f in objects.iteritems()) + for label, oid, form in sorted_objects: + w(u'''') docmsgid = '%s_%s_description' % (group, oid) doc = _(docmsgid) if doc != docmsgid: - w(u'

%s

' % html_escape(doc)) - w(form) + w(u'

%s

' % html_escape(doc).capitalize()) + + w(u'
' + % {'oid':oid, 'group':group}) + w(form) w(u'
') w(u'
') @@ -424,11 +445,12 @@ entity['value'] = self.vreg.property_value(key) return entity - def form(self, keys, splitlabel=False): + def form(self, formid, keys, splitlabel=False): stream = UStringIO() w = stream.write - w(u'
\n' % self.build_url()) + w(u'''\n''' % {'url' : self.build_url(), 'formid':formid}) w(u'
\n') + w(u'
') w(u'\n' % html_escape(self.req.url())) w(u'\n' % self.id) @@ -438,41 +460,37 @@ w(u'\n' % html_escape(params)) w(u'\n' % path) - #w(u'\n') + w(u'\n') w(u'\n' % self.req._('changes applied')) - w(u'
\n') - - w(u'\n') - for key in keys: - w(u'\n') + for key in keys: self.form_row(w, key, splitlabel) - w(u'\n') - w(u'
\n') - w(u'
\n') w(self.button_ok()) - w(self.button_cancel()) - w(u'
\n') w(u'
\n') w(u'
\n') return stream.getvalue() - + def form_row(self, w, key, splitlabel): - entity = self.entity_for_key(key) + entity = self.entity_for_key(key) eid = entity.eid - if splitlabel: - w(u'%s' % self.req._(key.split('.')[-1])) + if splitlabel: + w(u'' % self.req._(key.split('.')[-1]).capitalize()) else: - w(u'%s' % self.req._(key)) + w(u'' % self.req._(key).capitalize()) + wdg = self.vreg.property_value_widget(key, req=self.req) error = wdg.render_error(entity) - w(u'' % (error and 'error' or '')) - w(error) + w(u'
\n') + w(u'%s' % wdg.render_help(entity)) + w(u'
') + w(u'%s' % (error and 'error' or '', error)) self.form_row_hiddens(w, entity, key) - w(wdg.edit_render(entity)) - w(u'\n') - w(u'%s' % wdg.render_help(entity)) - return entity + w(wdg.edit_render(entity)) + w(u'' + % {'eid':entity.eid, 'value':wdg.current_display_value(entity)}) + w(u'
') + w(u'
') + return entity def form_row_hiddens(self, w, entity, key): eid = entity.eid @@ -481,13 +499,13 @@ w(u'' % (eid_param('pkey', eid), key)) w(u'' % (eid_param('edits-pkey', eid), '')) - + class EpropertiesForm(SystemEpropertiesForm): id = 'epropertiesform' title = _('preferences') - require_groups = ('users', 'managers') # we don't want guests to be able to come here - __selectors__ = chainfirst(none_rset, - chainall(one_line_rset, accept_rset)), + require_groups = ('users',) # we don't want guests to be able to come here + __selectors__ = chainfirst(none_rset, + chainall( match_user_group, one_line_rset, accept_rset)), accepts = ('EUser',) @classmethod @@ -512,19 +530,27 @@ def eprops_rset(self): return self.req.execute('Any P,K,V WHERE P is EProperty, P pkey K, P value V,' 'P for_user U, U eid %(x)s', {'x': self.user.eid}) +# def form_row(self, w, key, splitlabel): +# print 'user' + +class ManagerEpropertiesForm(EpropertiesForm): + title = _('preferences') + require_groups = ('managers',) + def form_row_hiddens(self, w, entity, key): - super(EpropertiesForm, self).form_row_hiddens(w, entity, key) + super(ManagerEpropertiesForm, self).form_row_hiddens(w, entity, key) # if user is in the managers group and the property is being created, # we have to set for_user explicitly - if not entity.has_eid() and self.user.matching_groups('managers'): + if not entity.has_eid(): eid = entity.eid w(u'' % (eid_param('edits-for_user', eid), INTERNAL_FIELD_VALUE)) w(u'' % (eid_param('for_user', eid), self.user.eid)) - +# def form_row(self, w, key, splitlabel): +# print 'manager' class ProcessInformationView(StartupView):