def _render_edit_form(self, fs, params={}, clear_session=False): # errors arrive in c.error and fs.errors c.log_message = params.get('log_message', '') # rgrp: expunge everything from session before dealing with # validation errors) so we don't have any problematic saves # when the fs.render causes a flush. # seb: If the session is *expunged*, then the form can't be # rendered; I've settled with a rollback for now, which isn't # necessarily what's wanted here. # dread: I think this only happened with tags because until # this changeset, Tag objects were created in the Renderer # every time you hit preview. So I don't believe we need to # clear the session any more. Just in case I'm leaving it in # with the log comments to find out. if clear_session: # log to see if clearing the session is ever required if model.Session.new or model.Session.dirty or model.Session.deleted: log.warn('Expunging session changes which were not expected: ' '%r %r %r', (model.Session.new, model.Session.dirty, model.Session.deleted)) try: model.Session.rollback() except AttributeError: # older SQLAlchemy versions model.Session.clear() edit_form_html = fs.render() c.form = h.literal(edit_form_html) return h.literal(render('package/edit_form.html'))
def _render_edit_form(self, fs, params={}, clear_session=False): # errors arrive in c.error and fs.errors c.log_message = params.get('log_message', '') # rgrp: expunge everything from session before dealing with # validation errors) so we don't have any problematic saves # when the fs.render causes a flush. # seb: If the session is *expunged*, then the form can't be # rendered; I've settled with a rollback for now, which isn't # necessarily what's wanted here. # dread: I think this only happened with tags because until # this changeset, Tag objects were created in the Renderer # every time you hit preview. So I don't believe we need to # clear the session any more. Just in case I'm leaving it in # with the log comments to find out. if clear_session: # log to see if clearing the session is ever required if model.Session.new or model.Session.dirty or model.Session.deleted: log.warn( 'Expunging session changes which were not expected: ' '%r %r %r', (model.Session.new, model.Session.dirty, model.Session.deleted)) try: model.Session.rollback() except AttributeError: # older SQLAlchemy versions model.Session.clear() edit_form_html = fs.render() c.form = h.literal(edit_form_html) return h.literal(render('package/edit_form.html'))
def dgu_linked_user(user, maxlength=16): # Overwrite h.linked_user from ckan import model from ckan.lib.base import h from ckanext.dgu.plugins_toolkit import c if user in [model.PSEUDO_USER__LOGGED_IN, model.PSEUDO_USER__VISITOR]: return user if not isinstance(user, model.User): user_name = unicode(user) user = model.User.get(user_name) if not user: # may be in the format "NHS North Staffordshire (uid 6107 )" match = re.match(".*\(uid (\d+)\s?\)", user_name) if match: drupal_user_id = match.groups()[0] user = model.User.get("user_d%s" % drupal_user_id) if c.is_an_official: # only officials can see the actual user name if user: publisher = ", ".join([group.title for group in user.get_groups("publisher")]) display_name = "%s (%s)" % (user.fullname, publisher) link_text = truncate(user.fullname or user.name, length=maxlength) return h.link_to(link_text, h.url_for(controller="user", action="read", id=user.name)) else: return truncate(user_name, length=maxlength) else: # joe public just gets a link to the user's publisher(s) import ckan.authz if user: groups = user.get_groups("publisher") if groups: return h.literal( " ".join( [ h.link_to(truncate(group.title, length=maxlength), "/publisher/%s" % group.name) for group in groups ] ) ) elif ckan.authz.Authorizer().is_sysadmin(user): return "System Administrator" else: return "Staff" else: return "Staff"
def dgu_linked_user(user, maxlength=16): # Overwrite h.linked_user from ckan import model from ckan.lib.base import h from ckanext.dgu.plugins_toolkit import c if user in [model.PSEUDO_USER__LOGGED_IN, model.PSEUDO_USER__VISITOR]: return user if not isinstance(user, model.User): user_name = unicode(user) user = model.User.get(user_name) if not user: # may be in the format "NHS North Staffordshire (uid 6107 )" match = re.match('.*\(uid (\d+)\s?\)', user_name) if match: drupal_user_id = match.groups()[0] user = model.User.get('user_d%s' % drupal_user_id) if (c.is_an_official): # only officials can see the actual user name if user: publisher = ', '.join([group.title for group in user.get_groups('publisher')]) display_name = '%s (%s)' % (user.fullname, publisher) link_text = truncate(user.fullname or user.name, length=maxlength) return h.link_to(link_text, h.url_for(controller='user', action='read', id=user.name)) else: return truncate(user_name, length=maxlength) else: # joe public just gets a link to the user's publisher(s) import ckan.authz if user: groups = user.get_groups('publisher') if groups: return h.literal(' '.join([h.link_to(truncate(group.title, length=maxlength), '/publisher/%s' % group.name) \ for group in groups])) elif ckan.authz.Authorizer().is_sysadmin(user): return 'System Administrator' else: return 'Staff' else: return 'Staff'
data = add_to_package_dict(get_package_dict(fs=fs), request.params) fs = fs.bind(model.Package, data=data, session=model.Session) else: fs = fs.bind(session=model.Session) #if 'preview' in request.params: # c.preview = ' ' c.form = self._render_edit_form(fs, request.params, clear_session=True) if 'preview' in request.params: c.is_preview = True try: PackageSaver().render_preview(fs, log_message=log_message, author=c.author, client=c) c.preview = h.literal(render('package/read_core.html')) except ValidationException, error: fs = error.args[0] c.form = self._render_edit_form(fs, request.params, clear_session=True) return render('package/new.html') return render('package/new.html') def edit(self, id=None): # allow id=None to allow posting # TODO: refactor to avoid duplication between here and new c.error = '' c.pkg = pkg = model.Package.get(id) if pkg is None: abort(404, '404 Not Found') model.Session().autoflush = False am_authz = self.authorizer.am_authorized(c, model.Action.EDIT, pkg)
data = add_to_package_dict(get_package_dict(fs=fs), request.params) fs = fs.bind(model.Package, data=data, session=model.Session) else: fs = fs.bind(session=model.Session) #if 'preview' in request.params: # c.preview = ' ' c.form = self._render_edit_form(fs, request.params, clear_session=True) if 'preview' in request.params: c.is_preview = True try: PackageSaver().render_preview(fs, log_message=log_message, author=c.author, client=c) c.preview = h.literal(render('package/read_core.html')) except ValidationException, error: fs = error.args[0] c.form = self._render_edit_form(fs, request.params, clear_session=True) return render('package/new.html') return render('package/new.html') def edit(self, id=None): # allow id=None to allow posting # TODO: refactor to avoid duplication between here and new c.error = '' c.pkg = pkg = model.Package.get(id) if pkg is None: abort(404, '404 Not Found') model.Session().autoflush = False