Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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))
Example #4
0
File: tag.py Project: whausen/part
    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")
Example #5
0
File: tag.py Project: alkadis/vcv
    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")
Example #6
0
    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")
Example #7
0
    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")
Example #8
0
    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")
Example #9
0
    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")
Example #10
0
    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")
Example #11
0
File: poll.py Project: whausen/part
    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")
Example #12
0
    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)
Example #13
0
File: poll.py Project: whausen/part
    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)
Example #14
0
 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')
Example #15
0
File: tag.py Project: whausen/part
 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")
Example #16
0
    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)
Example #17
0
 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")
Example #18
0
File: tag.py Project: alkadis/vcv
 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)
Example #19
0
    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")
Example #20
0
    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")
Example #21
0
File: tag.py Project: alkadis/vcv
 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")
Example #22
0
 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")
Example #23
0
    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")
Example #24
0
 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")
Example #25
0
    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")
Example #26
0
 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)
Example #27
0
 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)
Example #28
0
 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')
Example #29
0
 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)
Example #30
0
    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")
Example #31
0
    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)
Example #32
0
    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")
Example #33
0
    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")
Example #34
0
    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")
Example #35
0
    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))
Example #36
0
    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")
Example #37
0
    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")
Example #38
0
    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")
Example #39
0
    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))
Example #40
0
    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)
Example #41
0
    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)
Example #42
0
    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")
Example #43
0
    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))
Example #44
0
    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))
Example #45
0
    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")
Example #46
0
    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")
Example #47
0
    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")
Example #48
0
 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)
Example #49
0
    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")
Example #50
0
    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")
Example #51
0
    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)
Example #52
0
    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")