def proposals(self, format='json'): callback = self.form_result.get('callback') proposals = libsearch.query.run(None, entity_type=model.Proposal) if callback: d = render_json(proposals) response.content_type = 'application/javascript' return "%s(%s)" % (callback, d) else: return render_json(proposals)
def vote(self, id, format): c.poll = self._get_open_poll(id) if c.poll.action != model.Poll.ADOPT: abort(400, _("This is not an adoption poll.")) require.poll.vote(c.poll) decision = democracy.Decision(c.user, c.poll) votes = decision.make(self.form_result.get("position")) model.meta.Session.commit() if not asbool(config.get('adhocracy.hide_individual_votes', 'false')): for vote in votes: event.emit(event.T_VOTE_CAST, vote.user, instance=c.instance, topics=[c.poll.scope], vote=vote, poll=c.poll) if format == 'json': vdetail = votedetail.calc_votedetail_dict(c.instance, c.poll)\ if votedetail.is_enabled() else None return render_json( dict(decision=decision, score=c.poll.tally.score, votedetail=vdetail)) else: redirect(h.entity_url(c.poll.subject))
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 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 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.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 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 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, 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 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'): 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 index(self, format='html'): require.tag.index() tags = model.Tag.popular_tags(limit=500) if format == 'json': return render_json(tags) c.tags = sorted(text.tag_cloud_normalize(tags), key=lambda (k, c, v): k.name.lower()) return render("/tag/index.html")
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 autocomplete(self): prefix = self.form_result.get('q') (base, prefix) = text.tag_split_last(prefix) results = [] for (tag, freq) in model.Tag.complete(prefix, 10): display = "%s (%s)" % (tag.name, freq) full = base + tag.name + ", " results.append(dict(display=display, tag=full)) return render_json(results)
def index(self, format="html"): require.instance.index() c.instance_pager = pager.solr_instance_pager() if format == 'json': return render_json(c.instance_pager) c.tile = tiles.instance.InstanceTile(c.instance) return render("/instance/index.html")
def index(self, format='html'): tags = model.Tag.popular_tags(limit=500) if format == 'json': return render_json(tags) c.tags = sorted(h.tag.tag_cloud_normalize(tags), key=lambda (k, c, v): k.name.lower()) if format == 'overlay': return render("/tag/index.html", overlay=True) else: return render("/tag/index.html")
def index(self, format='html'): #require.user.manage() badges = Badge.all() if format == 'json': return render_json([badge.to_dict() for badge in badges]) badges_users = filter(lambda x: not x.badge_delegateable, badges) c.badges_users = sorted(badges_users, key=attrgetter('title')) badges_delegateables = filter(lambda x: x.badge_delegateable, badges) c.badges_delegateables = sorted(badges_delegateables, key=attrgetter('title')) return render("/badge/index.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 index(self, format="html"): require.instance.index() c.active_global_nav = "instances" c.instance_pager = pager.solr_instance_pager() if format == "json": return render_json(c.instance_pager) c.tile = tiles.instance.InstanceTile(c.instance) return render("/instance/index.html")
def index(self, format='html'): c.delegations = model.Delegation.all(instance=c.instance) if format == 'dot': c.users = model.User.all(instance=c.instance) response.content_type = "text/plain" return render("/delegation/graph.dot") elif format == 'json': c.delegations_pager = pager.delegations(c.delegations) return render_json(c.delegations_pager) else: return self.not_implemented(format=format)
def complete(self): prefix = unicode(request.params.get('q', u'')) users = model.User.complete(prefix, 15) results = [] for user in users: if user == c.user: continue display = "%s (%s)" % (user.user_name, user.name) if \ user.display_name else user.name results.append(dict(display=display, user=user.user_name)) return render_json(results)
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 proposals(self, id, format='html'): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.show(c.page_user) proposals = model.Proposal.find_by_creator(c.page_user) c.proposals_pager = pager.proposals(proposals) if format == 'json': return render_json(c.proposals_pager) self._common_metadata(c.page_user, member='proposals') return render("/user/proposals.html")
def index(self, format='html'): require.comment.index() comments = model.Comment.all() c.comments_pager = NamedPager( 'comments', comments, tiles.comment.row, count=10, sorts={_("oldest"): sorting.entity_oldest, _("newest"): sorting.entity_newest}, default_sort=sorting.entity_newest) if format == 'json': return render_json(c.comments_pager) return self.not_implemented(format=format)
def instances(self, id, format='html'): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.show(c.page_user) instances = [i for i in c.page_user.instances if i.is_shown()] c.instances_pager = pager.instances(instances) if format == 'json': return render_json(c.instances_pager) self._common_metadata(c.page_user, member='instances', add_canonical=True) return render("/user/instances.html")
def index(self, format='html'): require.instance.index() h.add_meta("description", _("An index of instances run at this site. " "Select which ones you would like to join " "and participate!")) instances = model.Instance.all() if format == 'json': return render_json(instances) c.instances_pager = pager.instances(instances) return render("/instance/index.html")
def rate(self, id, format): # rating is like polling but steps via abstention, i.e. if you have # first voted "for", rating will first go to "abstain" and only # then produce "against"- c.poll = self._get_open_poll(id) if c.poll.action not in [model.Poll.RATE, model.Poll.SELECT]: abort(400, _("This is not a rating poll.")) require.poll.vote(c.poll) decision = democracy.Decision(c.user, c.poll) old = decision.result new = self.form_result.get("position") positions = { (model.Vote.YES, model.Vote.YES): model.Vote.YES, (model.Vote.ABSTAIN, model.Vote.YES): model.Vote.YES, (model.Vote.NO, model.Vote.YES): model.Vote.ABSTAIN, (model.Vote.YES, model.Vote.NO): model.Vote.ABSTAIN, (model.Vote.ABSTAIN, model.Vote.NO): model.Vote.NO, (model.Vote.NO, model.Vote.NO): model.Vote.NO } position = positions.get((old, new), new) votes = decision.make(position) tally = model.Tally.create_from_poll(c.poll) event_type = { model.Poll.RATE: event.T_RATING_CAST, model.Poll.SELECT: event.T_SELECT_VARIANT }.get(c.poll.action) model.meta.Session.commit() if not asbool(config.get('adhocracy.hide_individual_votes', 'false')): for vote in votes: event.emit(event_type, vote.user, instance=c.instance, topics=[c.poll.scope], vote=vote, poll=c.poll) if format == 'json': vdetail = votedetail.calc_votedetail_dict(c.instance, c.poll)\ if votedetail.is_enabled() else None return render_json( dict(decision=decision, tally=tally.to_dict(), votedetail=vdetail)) elif format == 'ajax': return self.widget(id, format=self.form_result.get('cls')) elif c.poll.action == model.Poll.SELECT: redirect(h.entity_url(c.poll.selection)) else: redirect(h.entity_url(c.poll.subject))
def index(self, format='html'): require.instance.index() h.add_meta( "description", _("An index of instances run at this site. " "Select which ones you would like to join " "and participate!")) instances = model.Instance.all() if format == 'json': return render_json(instances) c.instances_pager = pager.instances(instances) return render("/instance/index.html")
def votes(self, id, format='html'): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.show(c.page_user) decisions = democracy.Decision.for_user(c.page_user, c.instance) if format == 'json': return render_json(list(decisions)) decisions = filter(lambda d: d.poll.action != model.Poll.RATE, decisions) c.decisions_pager = pager.user_decisions(decisions) self._common_metadata(c.page_user, member='votes') return render("/user/votes.html")
def index(self, format="html"): c.active_global_nav = 'instances' include_hidden = h.has_permission('global.admin') c.instance_pager = pager.solr_instance_pager(include_hidden) if format == 'json': return render_json(c.instance_pager) c.tile = tiles.instance.InstanceTile(c.instance) if format == 'overlay': return render("/instance/index.html", overlay=True) else: return render("/instance/index.html")
def vote(self, id, format="html"): c.poll = self._get_open_poll(id) if c.poll.action != model.Poll.ADOPT: abort(400, _("This is not an adoption poll.")) require.poll.vote(c.poll) decision = democracy.Decision(c.user, c.poll) votes = decision.make(self.form_result.get("position")) for vote in votes: event.emit(event.T_VOTE_CAST, vote.user, instance=c.instance, topics=[c.poll.scope], vote=vote, poll=c.poll) model.meta.Session.commit() if format == "json": return render_json(dict(decision=decision, score=tally.score)) redirect(h.entity_url(c.poll.subject))
def badges(self, id, errors=None, format='html'): instance = get_entity_or_abort(model.Instance, id) c.badges = self._editable_badges(instance) defaults = {'badge': [str(badge.id) for badge in instance.badges]} if format == 'ajax': checked = [badge.id for badge in instance.badges] json = {'title': instance.label, 'badges': [{ 'id': badge.id, 'description': badge.description, 'title': badge.title, 'checked': badge.id in checked} for badge in c.badges]} return render_json(json) return formencode.htmlfill.render( render("/instance/badges.html"), defaults=defaults)
def activity(self, id, format='html'): c.page_instance = get_entity_or_abort(model.Instance, id) require.instance.show(c.page_instance) if format == 'sline': sline = event.sparkline_samples(instance_activity, c.page_instance) return render_json(dict(activity=sline)) events = model.Event.find_by_instance(c.page_instance) if format == 'rss': return event.rss_feed(events, _('%s News' % c.page_instance.label), h.base_url(c.page_instance), _("News from %s") % c.page_instance.label) c.tile = tiles.instance.InstanceTile(c.page_instance) c.events_pager = pager.events(events) return render("/instance/activity.html")
def vote(self, id, format): c.poll = self._get_open_poll(id) if c.poll.action != model.Poll.ADOPT: abort(400, _("This is not an adoption poll.")) require.poll.vote(c.poll) decision = democracy.Decision(c.user, c.poll) votes = decision.make(self.form_result.get("position")) for vote in votes: event.emit(event.T_VOTE_CAST, vote.user, instance=c.instance, topics=[c.poll.scope], vote=vote, poll=c.poll) model.meta.Session.commit() if format == 'json': return render_json(dict(decision=decision, score=c.poll.tally.score)) redirect(h.entity_url(c.poll.subject))
def rate(self, id, format): # rating is like polling but steps via abstention, i.e. if you have # first voted "for", rating will first go to "abstain" and only # then produce "against"- c.poll = self._get_open_poll(id) if c.poll.action not in [model.Poll.RATE, model.Poll.SELECT]: abort(400, _("This is not a rating poll.")) require.poll.vote(c.poll) decision = democracy.Decision(c.user, c.poll) old = decision.result new = self.form_result.get("position") positions = {(model.Vote.YES, model.Vote.YES): model.Vote.YES, (model.Vote.ABSTAIN, model.Vote.YES): model.Vote.YES, (model.Vote.NO, model.Vote.YES): model.Vote.ABSTAIN, (model.Vote.YES, model.Vote.NO): model.Vote.ABSTAIN, (model.Vote.ABSTAIN, model.Vote.NO): model.Vote.NO, (model.Vote.NO, model.Vote.NO): model.Vote.NO} position = positions.get((old, new), new) votes = decision.make(position) tally = model.Tally.create_from_poll(c.poll) event_type = {model.Poll.RATE: event.T_RATING_CAST, model.Poll.SELECT: event.T_SELECT_VARIANT }.get(c.poll.action) model.meta.Session.commit() if not config.get_bool('adhocracy.hide_individual_votes'): for vote in votes: event.emit(event_type, vote.user, instance=c.instance, topics=[c.poll.scope], vote=vote, poll=c.poll) if format == 'json': vdetail = votedetail.calc_votedetail_dict(c.instance, c.poll)\ if votedetail.is_enabled() else None return render_json(dict(decision=decision, tally=tally.to_dict(), votedetail=vdetail)) elif format == 'ajax': return self.widget(id, format=self.form_result.get('cls')) elif c.poll.action == model.Poll.SELECT: redirect(h.entity_url(c.poll.selection)) else: redirect(h.entity_url(c.poll.subject))
def watchlist(self, id, format='html'): require.watch.index() 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 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.selection is None: 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 == "json": return render_json(c.decisions_pager) return render("/poll/votes.html")
def badges(self, id, errors=None, format='html'): c.page_instance = get_entity_or_abort(model.Instance, id) c.badges = self._editable_badges(c.page_instance) defaults = { 'badge': [str(badge.id) for badge in c.page_instance.badges], '_tok': csrf.token_id(), } if format == 'ajax': checked = [badge.id for badge in c.page_instance.badges] json = {'title': c.page_instance.label, 'badges': [{ 'id': badge.id, 'description': badge.description, 'title': badge.title, 'checked': badge.id in checked} for badge in c.badges]} return render_json(json) else: return formencode.htmlfill.render( render("/instance/badges.html", overlay=format == u'overlay'), defaults=defaults)
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)) return render("delegation/show.html")
def show(self, id, format='html'): c.page_user = get_entity_or_abort(model.User, id, instance_filter=False) require.user.show(c.page_user) if format == 'json': return render_json(c.page_user) query = model.meta.Session.query(model.Event) query = query.filter(model.Event.user == c.page_user) query = query.order_by(model.Event.time.desc()) query = query.limit(10) if format == 'rss': return event.rss_feed( query.all(), "%s Latest Actions" % c.page_user.name, h.base_url(None, path='/user/%s' % c.page_user.user_name), c.page_user.bio) c.events_pager = pager.events(query.all()) c.tile = tiles.user.UserTile(c.page_user) self._common_metadata(c.page_user, add_canonical=True) return render("/user/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 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.selection is None: 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 == 'json': return render_json(c.decisions_pager) return render("/poll/votes.html")