def user_tag_i_support(brain, request, va, **kw):
    """ Special view action for user tag 'support'.
        It requires catalog metadata + expects a brain
        as context, rather than a full object.
    """
    api = kw['api']

    obj = find_resource(api.root, brain['path'])
    # Only available on proposals
    if not obj.content_type == 'Proposal':
        return ""

    # only show form if users has the vote role
    show_form = False
    meeting = find_interface(obj, IMeeting)
    if ROLE_VOTER in meeting.get_groups(api.userid):
        show_form = True

    user_tags = request.registry.getAdapter(obj, IUserTags)
    userids = user_tags.userids_for_tag('support')
    #Note: It's not possible to have nested translation strings. So we do the translation here in advance.
    display_name = api.translate(_(u"Support"))
    expl_display_name = _(u"Support this")
    brain_url = "%s%s" % (request.application_url, brain['path'])

    response = dict(
        context_id=brain['uid'],
        toggle_url="%s/_support" % brain_url,
        tag='support',
        display_name=display_name,
        get_userinfo_url=api.get_userinfo_url,
        expl_display_name=expl_display_name,
    )

    if api.userid and api.userid in userids:
        #Current user likes the current context
        response['button_label'] = _(u"Remove ${display_name}",
                                     mapping={'display_name': display_name})
        response['selected'] = True
        response['do'] = "0"
        userids = list(userids)
        userids.remove(api.userid)
    else:
        #Current user hasn't selected the current context
        response['button_label'] = display_name
        response['selected'] = False
        response['do'] = "1"

    response['userids'] = userids
    response['has_entries'] = bool(response['selected'] or userids)
    response[
        'tagging_users_url'] = " %s/_tagging_users?tag=%s&display_name=%s&expl_display_name=%s" % (
            brain_url, 'support', display_name, expl_display_name)
    response['show_form'] = show_form

    return render('voteit.core.views:templates/snippets/user_tag.pt',
                  response,
                  request=request)
Exemple #2
0
def meeting_access_view_and_discuss(context, request, va, **kw):
    if context.get_field_value('access_policy') != 'view_and_discuss_permissions':
        raise Exception("ViewAction for request meeting access view_and_discuss_permissions was called, but that access policy wasn't set for this meeting.")
    api = kw['api']
    if not api.userid:
        raise Exception("Can't find userid")
    schema = colander.Schema()
    add_csrf_token(context, request, schema)
    form = Form(schema, buttons=(button_request, button_cancel,))
    response = {'api': api}
    post = request.POST
    if 'request' in post:
        controls = post.items()
        try:
            appstruct = form.validate(controls)
        except ValidationFailure, e:
            response['form'] = e.render()
            return response
        context.add_groups(api.userid, [ROLE_DISCUSS, ], event = True)
        api.flash_messages.add(_(u"Access granted!"))
        url = resource_url(context, request)
        return HTTPFound(location=url)
Exemple #3
0
from betahaus.viewcomponent import view_action
from pyramid.url import resource_url
from pyramid.httpexceptions import HTTPFound

from voteit.core.models.schemas import add_csrf_token
from voteit.core.models.schemas import button_request
from voteit.core.models.schemas import button_cancel
from voteit.core.security import ROLE_DISCUSS
from voteit.core.models.interfaces import IMeeting

from scout.annual_meeting import ScoutMF as _


@view_action('request_meeting_access', 'view_and_discuss_permissions',
             interface = IMeeting,
             title = _(u"meeting_access_view_and_discuss_label",
                       default = u"All users will be given view and discuss permissions INSTANTLY if they request it."),)
def meeting_access_view_and_discuss(context, request, va, **kw):
    if context.get_field_value('access_policy') != 'view_and_discuss_permissions':
        raise Exception("ViewAction for request meeting access view_and_discuss_permissions was called, but that access policy wasn't set for this meeting.")
    api = kw['api']
    if not api.userid:
        raise Exception("Can't find userid")
    schema = colander.Schema()
    add_csrf_token(context, request, schema)
    form = Form(schema, buttons=(button_request, button_cancel,))
    response = {'api': api}
    post = request.POST
    if 'request' in post:
        controls = post.items()
        try:
            appstruct = form.validate(controls)
Exemple #4
0
def scout_group_node():
    return colander.SchemaNode(
        colander.String(),
        title=_(u"Scout group"),
        validator=html_string_validator,
    )