def ask_delete(self, proposal_id, id): c.proposal = get_entity_or_abort(model.Proposal, proposal_id) c.selection = get_entity_or_abort(model.Selection, id) require.selection.delete(c.selection) c.proposal_tile = tiles.proposal.ProposalTile(c.proposal) return render("/selection/ask_delete.html")
def details(self, proposal_id, selection_id, format='html'): ''' ''' selection = get_entity_or_abort(model.Selection, selection_id) proposal = get_entity_or_abort(model.Proposal, proposal_id) if selection.proposal is not proposal: ret_abort(_('Page not Found'), code=404) c.page = selection.page variant_polls = dict(selection.variant_polls) variant_to_show = selection.selected if not variant_to_show: variant_to_show = model.Text.HEAD variant_items = PageController.variant_items(c.page, selection=selection) get_score = lambda item: \ selection.variant_poll(item['variant']).tally.score c.variant_items = PageController.insert_variant_score_and_sort( variant_items, get_score) c.variant_details = PageController.variant_details( c.page, variant_to_show) c.variant_details_json = json.dumps(c.variant_details, indent=4) c.selection_details = PageController.selection_urls(selection) c.selection_details_json = json.dumps(c.selection_details, indent=4) c.current_variant_poll = variant_polls[variant_to_show] c.selection = selection if format == 'overlay': return render('/proposal/details.html', overlay=True) return render('/proposal/details.html')
def delete(self, proposal_id, id): c.proposal = get_entity_or_abort(model.Proposal, proposal_id) c.selection = get_entity_or_abort(model.Selection, id) require.selection.delete(c.selection) # TODO implement # event.emit(event.T_PROPOSAL_DELETE, c.user, instance=c.instance, # topics=[c.proposal], proposal=c.proposal) c.selection.delete() model.meta.Session.commit() h.flash(_("The inclusion of %s has been deleted.") % c.selection.page.title, "success") redirect(h.entity_url(c.proposal))
def delete(self, proposal_id, id): c.proposal = get_entity_or_abort(model.Proposal, proposal_id) c.selection = get_entity_or_abort(model.Selection, id) require.selection.delete(c.selection) # TODO implement #event.emit(event.T_PROPOSAL_DELETE, c.user, instance=c.instance, # topics=[c.proposal], proposal=c.proposal) c.selection.delete() model.meta.Session.commit() h.flash(_("The inclusion of %s has been deleted.") % c.selection.page.title, 'success') redirect(h.entity_url(c.proposal))
def groupmod(self, id): c.page_user = get_entity_or_abort(model.User, id) require.user.supervise(c.page_user) to_group = self.form_result.get("to_group") if not to_group.code in model.Group.INSTANCE_GROUPS: h.flash( _("Cannot make %(user)s a member of %(group)s") % { 'user': c.page_user.name, 'group': to_group.group_name }, 'error') redirect(h.entity_url(c.page_user)) had_vote = c.page_user._has_permission("vote.cast") for membership in c.page_user.memberships: if (not membership.is_expired() and membership.instance == c.instance): membership.group = to_group model.meta.Session.commit() event.emit(event.T_INSTANCE_MEMBERSHIP_UPDATE, c.page_user, instance=c.instance, group=to_group, admin=c.user) if had_vote and not c.page_user._has_permission("vote.cast"): # user has lost voting privileges c.page_user.revoke_delegations(c.instance) model.meta.Session.commit() redirect(h.entity_url(c.page_user))
def watchlist(self, id, format='html'): require.watch.index() c.active_global_nav = 'watchlist' c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.show(c.page_user) watches = model.Watch.all_by_user(c.page_user) entities = [w.entity for w in watches if (w.entity is not None) \ and (not isinstance(w.entity, unicode))] c.entities_pager = NamedPager('watches', entities, tiles.dispatch_row_with_comments, sorts={ _("oldest"): sorting.entity_oldest, _("newest"): sorting.entity_newest }, default_sort=sorting.entity_newest) if format == 'json': return render_json(c.entities_pager) self._common_metadata(c.page_user, member='watchlist') return render("/user/watchlist.html")
def reset(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) try: if c.page_user.reset_code != self.form_result.get('c'): raise ValueError() new_password = random_token() c.page_user.password = new_password model.meta.Session.add(c.page_user) model.meta.Session.commit() body = ( _("your password has been reset. It is now:") + "\r\n\r\n " + new_password + "\r\n\r\n" + _("Please login and change the password in your user " "settings.") + "\n\n" + _("Your user name to login is: %s") % c.page_user.user_name) libmail.to_user(c.page_user, _("Your new password"), body) h.flash( _("Success. You have been sent an email with your new " "password."), 'success') except Exception: h.flash( _("The reset code is invalid. Please repeat the password" " recovery procedure."), 'error') redirect('/login')
def reply_form(self, id): parent = get_entity_or_abort(model.Comment, int(id)) require.comment.reply(parent) topic = parent.topic variant = getattr(topic, 'variant', None) came_from = c.came_from return self._render_ajax_create_form(parent, topic, variant, came_from)
def reply_form(self, id): parent = get_entity_or_abort(model.Comment, int(id)) require.comment.reply(parent) topic = parent.topic variant = getattr(topic, 'variant', None) ret_url = request.params['ret_url'] return self._render_ajax_create_form(parent, topic, variant, ret_url)
def show(self, id, format=u'html'): if not c.instance.display_category_pages: abort(404) require.proposal.index() query = self.form_result.get('proposals_q') category = get_entity_or_abort(model.CategoryBadge, id) pages = model.Page.all_q(instance=c.instance, functions=model.Page.LISTED) \ .join(model.DelegateableBadges) \ .filter(model.DelegateableBadges.badge_id == category.id) \ .all() pages = filter(lambda p: p.parent is None, pages) pages_pager = pager.NamedPager('pages', pages, tiles.page.smallrow, enable_pages=False, enable_sorts=False) default_sorting = config.get( 'adhocracy.listings.instance_proposal.sorting') proposals_pager = pager.solr_proposal_pager( c.instance, {'text': query}, default_sorting=default_sorting, extra_filter={'facet.delegateable.badgecategory': category.id}) data = { 'category': category, 'pages_pager': pages_pager, 'proposals_pager': proposals_pager, } return render('/category/show.html', data, overlay=format == u'overlay')
def edit(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.edit(c.page_user) c.locales = i18n.LOCALES c.tile = tiles.user.UserTile(c.page_user) return render("/user/edit.html")
def show(self, id, format='html'): c.page_instance = get_entity_or_abort(model.Instance, id) require.instance.show(c.page_instance) if format == 'json': return render_json(c.page_instance) if format == 'rss': return self.activity(id, format) if c.page_instance != c.instance: redirect(h.entity_url(c.page_instance)) c.tile = tiles.instance.InstanceTile(c.page_instance) proposals = model.Proposal.all(instance=c.page_instance) c.new_proposals_pager = pager.proposals( proposals, size=7, enable_sorts=False, enable_pages=False, default_sort=sorting.entity_newest) c.sidebar_delegations = (_('Delegations are enabled.') if c.page_instance.allow_delegate else _('Delegations are disabled.')) #pages = model.Page.all(instance=c.page_instance, # functions=[model.Page.NORM]) #c.top_pages_pager = pager.pages( # pages, size=7, enable_sorts=False, # enable_pages=False, default_sort=sorting.norm_selections) #tags = model.Tag.popular_tags(limit=40) #c.tags = sorted(text.tag_cloud_normalize(tags), # key=lambda (k, c, v): k.name) if asbool(config.get('adhocracy.show_instance_overview_milestones')) \ and c.page_instance.milestones: number = asint(config.get( 'adhocracy.number_instance_overview_milestones', 3)) milestones = model.Milestone.all_future_q( instance=c.page_instance).limit(number).all() c.next_milestones_pager = pager.milestones( milestones, size=number, enable_sorts=False, enable_pages=False, default_sort=sorting.milestone_time) events = model.Event.find_by_instance(c.page_instance, limit=3) c.events_pager = pager.events(events, enable_pages=False, enable_sorts=False) c.stats = { 'comments': model.Comment.all_q().count(), 'proposals': model.Proposal.all_q( instance=c.page_instance).count(), 'members': model.Membership.all_q().count() } c.tutorial_intro = _('tutorial_instance_show_intro') c.tutorial = 'instance_show' return render("/instance/show.html")
def edit(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.edit(c.page_user) c.locales = i18n.LOCALES return render("/user/edit.html")
def image(self, id, y, x=None): if not c.instance.display_category_pages: abort(404) category = get_entity_or_abort(model.CategoryBadge, id, instance_filter=False) return render_logo(category, y, x=x)
def edit(self, id, format='html'): c.comment = get_entity_or_abort(model.Comment, id) require.comment.edit(c.comment) if format == 'ajax': return render_def('/comment/tiles.html', 'edit_form', {'comment': c.comment}) return render('/comment/edit.html')
def events(self, id, format=u'html'): if not c.instance.display_category_pages: abort(404) category = get_entity_or_abort(model.CategoryBadge, id) events = h.category.event_q( category, event_filter=request.params.getall('event_filter'), count=min(int(request.params.get('count', 50)), 100), ).all() enable_sorts = asbool(request.params.get('enable_sorts', 'true')) enable_pages = asbool(request.params.get('enable_pages', 'true')) row_type = request.params.get('row_type', 'row') if row_type not in ['row', 'profile_row', 'sidebar_row', 'tiny_row']: abort(400) data = { 'event_pager': pager.events(events, enable_sorts=enable_sorts, enable_pages=enable_pages, row_type=row_type), } return render('/category/events.html', data, overlay=format == 'overlay', overlay_size=OVERLAY_SMALL)
def update(self, id, format='html'): c.comment = get_entity_or_abort(model.Comment, id) require.comment.edit(c.comment) rev = c.comment.create_revision( self.form_result.get('text'), c.user, sentiment=self.form_result.get('sentiment')) model.meta.Session.commit() if can.user.vote(): decision = democracy.Decision(c.user, c.comment.poll) if not decision.result == model.Vote.YES: decision.make(model.Vote.YES) model.meta.Session.commit() # do not modify watch state as comments are always watched event.emit(event.T_COMMENT_EDIT, c.user, instance=c.instance, topics=[c.comment.topic], comment=c.comment, topic=c.comment.topic, rev=rev) if c.came_from != u'': redirect(c.came_from + "#c" + str(c.comment.id)) if format != 'html': return ret_success(entity=c.comment, format=format) else: return ret_success(entity=c.comment, format='fwd')
def update(self, id, format='html'): c.comment = get_entity_or_abort(model.Comment, id) require.comment.edit(c.comment) rev = c.comment.create_revision( self.form_result.get('text'), c.user, sentiment=self.form_result.get('sentiment')) model.meta.Session.commit() if can.user.vote(): decision = democracy.Decision(c.user, c.comment.poll) if not decision.result == model.Vote.YES: decision.make(model.Vote.YES) model.meta.Session.commit() # do not modify watch state as comments are always watched event.emit(event.T_COMMENT_EDIT, c.user, instance=c.instance, topics=[c.comment.topic], comment=c.comment, topic=c.comment.topic, rev=rev) if len(request.params.get('ret_url', '')): redirect(request.params.get('ret_url') + "#c" + str(c.comment.id)) if format != 'html': return ret_success(entity=c.comment, format=format) else: return ret_success(entity=c.comment, format='fwd')
def create(self, id, format='html'): c.page_user = get_entity_or_abort(model.User, id) require.user.message(c.page_user) try: self.form_result = MessageCreateForm().to_python(request.params) except Invalid, i: return self.new(id, errors=i.unpack_errors())
def create(self, proposal_id, format='html'): c.proposal = get_entity_or_abort(model.Proposal, proposal_id) require.selection.create(c.proposal) try: self.form_result = SelectionCreateForm().to_python(request.params) except Invalid, i: return self.propose(proposal_id, errors=i.unpack_errors())
def unban(self, id): c.page_user = get_entity_or_abort(model.User, id) require.user.manage(c.page_user) c.page_user.banned = False model.meta.Session.commit() h.flash(_("The account has been re-activated."), 'success') redirect(h.entity_url(c.page_user))
def activate(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) code = self.form_result.get('c') if c.page_user.activation_code is None: h.flash(_(u'Thank you, The address is already activated.')) redirect(h.entity_url(c.page_user)) elif c.page_user.activation_code != code: h.flash(_("The activation code is invalid. Please have it " "resent."), 'error') redirect(h.entity_url(c.page_user)) c.page_user.activation_code = None model.meta.Session.commit() if code.startswith(model.User.IMPORT_MARKER): # Users imported by admins login_user(c.page_user, request) h.flash(_("Welcome to %s") % h.site.name(), 'success') if c.instance: membership = model.Membership(c.page_user, c.instance, c.instance.default_group) model.meta.Session.expunge(membership) model.meta.Session.add(membership) model.meta.Session.commit() redirect(h.entity_url(c.instance)) else: redirect(h.base_url('/instance', None)) else: h.flash(_("Your email has been confirmed."), 'success') redirect(h.entity_url(c.page_user)) redirect(h.entity_url(c.page_user))
def show(self, id, format='html'): c.tag = get_entity_or_abort(model.Tag, id) require.tag.show(c.tag) require.proposal.index() require.page.index() if format == 'json': return render_json(c.tag) entities = libsearch.query.run(u'tag:' + c.tag.name, instance=c.instance) entities = [e for e in entities if (isinstance(e, model.Proposal) or isinstance(e, model.Page))] c.entities_pager = NamedPager( 'entities', entities, tiles.dispatch_row, sorts={_("oldest"): sorting.entity_oldest, _("newest"): sorting.entity_newest, _("alphabetically"): sorting.delegateable_title, _("relevance"): sorting.entity_stable}, default_sort=sorting.entity_stable, q=c.query) tags = model.Tag.similar_tags(c.tag, limit=50) c.cloud_tags = sorted(text.tag_cloud_normalize(tags), key=lambda (k, c, v): k.name) return render("/tag/show.html")
def show(self, id, format='html'): c.tag = get_entity_or_abort(model.Tag, id) require.tag.show(c.tag) require.proposal.index() require.page.index() if format == 'json': return render_json(c.tag) entities = libsearch.query.run(u'tag:' + c.tag.name, instance=c.instance) entities = [e for e in entities if (isinstance(e, model.Proposal) or isinstance(e, model.Page))] c.entities_pager = NamedPager( 'entities', entities, tiles.dispatch_row, sorts={_("oldest"): sorting.entity_oldest, _("newest"): sorting.entity_newest, _("alphabetically"): sorting.delegateable_title, _("relevance"): sorting.entity_stable}, default_sort=sorting.entity_stable, q=c.query) tags = model.Tag.similar_tags(c.tag, limit=50) c.cloud_tags = sorted(h.tag.tag_cloud_normalize(tags), key=lambda (k, c, v): k.name) if format == 'overlay': return render("/tag/show.html", overlay=True) else: return render("/tag/show.html")
def votes(self, id, format='html'): c.poll = get_entity_or_abort(model.Poll, id) # cover over data inconsistency because of a bug where pages (norms) # where deleted when a proposal was deleted. # Fixes http://trac.adhocracy.de/ticket/262 if (c.poll.action == model.Poll.SELECT and c.poll.selection is None): logmsg = ('Poll: "%s" is a model.Poll.rate poll, which should ' 'have a selection, but the selection is None. Subject ' 'of the Poll is %s') % (c.poll, c.poll.subject) log.error(logmsg) raise abort(404) require.poll.show(c.poll) decisions = democracy.Decision.for_poll(c.poll) if (hasattr(self, 'form_result') and self.form_result.get('result') != None): result_form = self.form_result.get('result') decisions = filter(lambda d: d.result == result_form, decisions) c.decisions_pager = pager.scope_decisions(decisions) if format == 'overlay': return render_def('/pager.html', 'overlay_pager', pager=c.decisions_pager, render_facets=False) if format == 'json': return render_json(c.decisions_pager) return render("/poll/votes.html")
def update_badges(self, id): user = get_entity_or_abort(model.User, id) badges = self.form_result.get('badge') if not has('global.admin'): # instance admins may only add user badges limited to this instance for badge in badges: if not badge.instance == c.instance: h.flash(_(u'Invalid badge choice.'), u'error') redirect(h.entity_url(user)) creator = c.user added = [] removed = [] for badge in user.badges: if badge not in badges: removed.append(badge) user.badges.remove(badge) for badge in badges: if badge not in user.badges: badge.assign(user, creator) added.append(badge) model.meta.Session.flush() # FIXME: needs commit() cause we do an redirect() which raises # an Exception. model.meta.Session.commit() post_update(user, model.update.UPDATE) redirect(h.entity_url(user, instance=c.instance))
def _new(self, proposal_id, template, errors): c.proposal = get_entity_or_abort(model.Proposal, proposal_id) require.selection.create(c.proposal) defaults = dict(request.params) c.proposal_tile = tiles.proposal.ProposalTile(c.proposal) return htmlfill.render(render(template), defaults=defaults, errors=errors, force_defaults=False)
def update(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.edit(c.page_user) if self.form_result.get("password_change"): c.page_user.password = self.form_result.get("password_change") c.page_user.display_name = self.form_result.get("display_name") c.page_user.page_size = self.form_result.get("page_size") c.page_user.no_help = self.form_result.get("no_help") c.page_user.bio = self.form_result.get("bio") email = self.form_result.get("email").lower() email_changed = email != c.page_user.email c.page_user.email = email c.page_user.email_priority = self.form_result.get("email_priority") #if c.page_user.twitter: # c.page_user.twitter.priority = \ # self.form_result.get("twitter_priority") # model.meta.Session.add(c.page_user.twitter) locale = Locale(self.form_result.get("locale")) if locale and locale in i18n.LOCALES: c.page_user.locale = locale model.meta.Session.add(c.page_user) model.meta.Session.commit() if email_changed: libmail.send_activation_link(c.page_user) if c.page_user == c.user: event.emit(event.T_USER_EDIT, c.user) else: event.emit(event.T_USER_ADMIN_EDIT, c.page_user, admin=c.user) redirect(h.entity_url(c.page_user))
def show(self, id, format='html'): c.page_instance = get_entity_or_abort(model.Instance, id) require.instance.show(c.page_instance) if format == 'json': return render_json(c.page_instance) if format == 'rss': return self.activity(id, format) if c.page_instance != c.instance: redirect(h.entity_url(c.page_instance)) c.tile = tiles.instance.InstanceTile(c.page_instance) proposals = model.Proposal.all(instance=c.page_instance) c.new_proposals_pager = pager.proposals( proposals, size=7, enable_sorts=False, enable_pages=False, default_sort=sorting.entity_newest) #pages = model.Page.all(instance=c.page_instance, # functions=[model.Page.NORM]) #c.top_pages_pager = pager.pages( # pages, size=7, enable_sorts=False, # enable_pages=False, default_sort=sorting.norm_selections) #tags = model.Tag.popular_tags(limit=40) #c.tags = sorted(text.tag_cloud_normalize(tags), # key=lambda (k, c, v): k.name) if c.page_instance.milestones: c.milestones = model.Milestone.all(instance=c.page_instance) c.stats = { 'comments': model.Comment.all_q().count(), 'proposals': model.Proposal.all_q( instance=c.page_instance).count(), 'members': model.Membership.all_q().count() } return render("/instance/show.html")
def votes(self, id, format='html'): c.poll = get_entity_or_abort(model.Poll, id) # cover over data inconsistency because of a bug where pages (norms) # were deleted when a proposal was deleted. # Fixes http://trac.adhocracy.de/ticket/262 if (c.poll.action == model.Poll.SELECT and c.poll.selection is None): logmsg = ('Poll: "%s" is a model.Poll.rate poll, which should ' 'have a selection, but the selection is None. Subject ' 'of the Poll is %s') % (c.poll, c.poll.subject) log.error(logmsg) raise abort(404) require.poll.show(c.poll) decisions = democracy.Decision.for_poll(c.poll) if (hasattr(self, 'form_result') and self.form_result.get('result') is not None): result_form = self.form_result.get('result') decisions = filter(lambda d: d.result == result_form, decisions) c.decisions_pager = pager.scope_decisions(decisions) if format == 'json': return render_json(c.decisions_pager) elif format == 'ajax': return render_def('/pager.html', 'overlay_pager', pager=c.decisions_pager, render_facets=False) elif format == 'overlay': return render("/poll/votes.html", overlay=True) else: return render("/poll/votes.html")
def show(self, id, format='html'): c.delegation = get_entity_or_abort(model.Delegation, id) require.delegation.show(c.delegation) c.scope = c.delegation.scope decisions = democracy.Decision.for_user(c.delegation.principal, c.instance) decisions = filter(lambda d: c.delegation in d.delegations, decisions) decisions = filter( lambda d: isinstance(d.poll.subject, model.Proposal), decisions) c.decisions_pager = pager.NamedPager( 'decisions', decisions, tiles.decision.user_row, sorts={ _("oldest"): sorting.entity_oldest, _("newest"): sorting.entity_newest }, default_sort=sorting.entity_newest) if format == 'json': return render_json((c.delegation, c.decisions_pager)) elif format == 'overlay': return render("delegation/show.html", overlay=True) else: return render("delegation/show.html")
def update_badges(self, id, format='html'): instance = get_entity_or_abort(model.Instance, id) editable_badges = self._editable_badges(instance) badges = self.form_result.get('badge') #remove badges for badge in instance.badges: if badge not in editable_badges: # the user can not edit the badge, so we don't remove it continue if badge not in badges: instance.badges.remove(badge) #add badges for badge in badges: if badge not in instance.badges: badge.assign(instance, c.user) model.meta.Session.commit() post_update(instance, model.update.UPDATE) if format == 'ajax': obj = { 'html': render_def('/badge/tiles.html', 'badges', badges=instance.badges) } return render_json(obj)
def create(self, proposal_id, format="html"): c.proposal = get_entity_or_abort(model.Proposal, proposal_id) require.selection.create(c.proposal) try: self.form_result = SelectionCreateForm().to_python(request.params) except Invalid, i: return self.propose(proposal_id, errors=i.unpack_errors())
def show(self, id, format='html'): poll = get_entity_or_abort(model.Poll, id) require.poll.show(poll) if format == 'json': return render_json(poll) return self.not_implemented(format=format)
def show(self, id, format='html'): poll = get_entity_or_abort(model.Poll, id) require.poll.show(poll) if format == 'json': return render_json(poll) else: return self.not_implemented(format=format)
def new_proposal(self, proposal_id, errors={}, format=u'html'): c.proposal = get_entity_or_abort(Proposal, proposal_id) require.proposal.message(c.proposal) defaults = dict(request.params) return htmlfill.render(render('/massmessage/new_proposal.html', overlay=format == u'overlay'), defaults=defaults, errors=errors, force_defaults=False)
def show(self, id, format='html'): c.comment = get_entity_or_abort(model.Comment, id) require.comment.show(c.comment) if format == 'fwd': redirect(h.entity_url(c.comment)) elif format == 'json': return render_json(c.comment) return render('/comment/show.html')
def resend(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.edit(c.page_user) libmail.send_activation_link(c.page_user) h.flash(_("The activation link has been re-sent to your email " "address."), 'notice') redirect(h.entity_url(c.page_user, member='edit'))
def new(self, id, format='html', errors={}): c.page_user = get_entity_or_abort(model.User, id) require.user.message(c.page_user) html = render("/message/new.html", overlay=format == u'overlay') return htmlfill.render(html, defaults=request.params, errors=errors, force_defaults=False)
def badges(self, id, errors=None): c.badges = model.Badge.all() c.badges = filter(lambda x: not x.badge_delegateable, c.badges) c.badges = sorted(c.badges, key=attrgetter('title')) c.page_user = get_entity_or_abort(model.User, id) defaults = {'badge': [str(badge.id) for badge in c.page_user.badges]} return formencode.htmlfill.render( render("/user/badges.html"), defaults=defaults)
def resend(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.edit(c.page_user) libmail.send_activation_link(c.page_user) path = request.params.get('came_from', None) ret_success( message=_("The activation link has been re-sent to your email " "address."), category='success', entity=c.page_user, member='edit', force_path=path)
def set_password(self, id): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.edit(c.page_user) c.page_user.password = self.form_result.get('password') model.meta.Session.add(c.page_user) model.meta.Session.commit() h.flash(_('Password has been set. Have fun!'), 'success') redirect(h.base_url('/'))
def delete(self, id): c.page_user = get_entity_or_abort(model.User, id) require.user.delete(c.page_user) c.page_user.delete() model.meta.Session.commit() h.flash(_("The account has been deleted."), 'success') if c.instance is not None: redirect(h.instance.url(c.instance)) else: redirect(h.site.base_url(instance=None))
def show(self, id, format="html"): c.page_instance = get_entity_or_abort(model.Instance, id) require.instance.show(c.page_instance) if format == "json": return render_json(c.page_instance) if format == "rss": return self.activity(id, format) if c.page_instance != c.instance: redirect(h.entity_url(c.page_instance)) c.tile = tiles.instance.InstanceTile(c.page_instance) proposals = model.Proposal.all(instance=c.page_instance) c.new_proposals_pager = pager.proposals( proposals, size=7, enable_sorts=False, enable_pages=False, default_sort=sorting.entity_newest ) c.sidebar_delegations = ( _("Delegations are enabled.") if c.page_instance.allow_delegate else _("Delegations are disabled.") ) # pages = model.Page.all(instance=c.page_instance, # functions=[model.Page.NORM]) # c.top_pages_pager = pager.pages( # pages, size=7, enable_sorts=False, # enable_pages=False, default_sort=sorting.norm_selections) # tags = model.Tag.popular_tags(limit=40) # c.tags = sorted(text.tag_cloud_normalize(tags), # key=lambda (k, c, v): k.name) if asbool(config.get("adhocracy.show_instance_overview_milestones")) and c.page_instance.milestones: number = asint(config.get("adhocracy.number_instance_overview_milestones", 3)) milestones = model.Milestone.all_future_q(instance=c.page_instance).limit(number).all() c.next_milestones_pager = pager.milestones( milestones, size=number, enable_sorts=False, enable_pages=False, default_sort=sorting.milestone_time ) events = model.Event.find_by_instance(c.page_instance, limit=3) c.events_pager = pager.events(events, enable_pages=False, enable_sorts=False) c.stats = { "comments": model.Comment.all_q().count(), "proposals": model.Proposal.all_q(instance=c.page_instance).count(), "members": model.Membership.all_q().count(), } c.tutorial_intro = _("tutorial_instance_show_intro") c.tutorial = "instance_show" return render("/instance/show.html")
def history(self, id, format='html'): c.comment = get_entity_or_abort(model.Comment, id) require.comment.show(c.comment) c.revisions_pager = NamedPager( 'revisions', c.comment.revisions, tiles.revision.row, count=10, sorts={_("oldest"): sorting.entity_oldest, _("newest"): sorting.entity_newest}, default_sort=sorting.entity_newest) if format == 'json': return render_json(c.revisions_pager) return render('/comment/history.html')
def delete(self, id, format='html'): c.comment = get_entity_or_abort(model.Comment, id) require.comment.delete(c.comment) c.comment.delete() model.meta.Session.commit() event.emit(event.T_COMMENT_DELETE, c.user, instance=c.instance, topics=[c.comment.topic], comment=c.comment, topic=c.comment.topic) return ret_success(message=_("The comment has been deleted."), entity=c.comment.topic, format=format)