예제 #1
0
 def before_update(self):
     invitations_schema = self.schema.get('invitations').children[0]
     schema_instance = InvitationSchema()
     roles_node = invitations_schema.get('roles')
     if has_role(role=('Moderator',)):
         roles_node.widget = roles_choice(roles_node, 
                             ['Moderator', 'Member', 'Examiner'])
         organization_node = schema_instance.get('organization')
         ismanager_node = schema_instance.get('ismanager')
         invitations_schema.children.append(organization_node)
         invitations_schema.children.append(ismanager_node)
     else:
         invitations_schema.children.remove(roles_node)
예제 #2
0
class EditInvitationView(FormView):

    title = _('Edit the invitation')
    schema = select(InvitationSchema(editable=True), [
        'title', 'user_title', 'roles', 'first_name', 'last_name', 'email',
        'organization'
    ])
    behaviors = [EditInvitation, Cancel]
    formid = 'formeditinvitation'
    name = 'editinvitation'

    def before_update(self):
        if not has_role(role=('Moderator', )):
            self.schema = select(
                InvitationSchema(editable=True),
                ['title', 'user_title', 'first_name', 'last_name', 'email'])

        self.action = self.request.resource_url(
            self.context,
            'novaideoapi',
            query={
                'op': 'update_action_view',
                'node_id': EditInvitation.node_definition.id
            })
        self.schema.widget = deform.widget.FormWidget(
            css_class='deform novaideo-ajax-form')

    def default_data(self):
        return self.context
예제 #3
0
    def start(self, context, request, appstruct, **kw):
        datas = context.get_data(
            select(omit(InvitationSchema(), ['_csrf_token_']), [
                'user_title', 'roles', 'first_name', 'last_name', 'email',
                'organization'
            ]))
        roles = datas.pop('roles')
        password = appstruct['password']
        datas['locale'] = my_locale_negotiator(request)
        person = Person(password=password, **datas)
        root = getSite(context)
        principals = find_service(root, 'principals')
        users = principals['users']
        name = person.first_name + ' ' + person.last_name
        name = name_chooser(users, name=name)
        users[name] = person
        if getattr(context, 'ismanager', False) and \
           context.organization:
            grant_roles(person,
                        (('OrganizationResponsible', context.organization), ))

        person.state.append('active')
        grant_roles(person, roles)
        grant_roles(person, (('Owner', person), ))
        manager = context.manager
        root.delfromproperty('invitations', context)
        root.addtoproperty('news_letter_members', person)
        newsletters = root.get_newsletters_automatic_registration()
        email = getattr(person, 'email', '')
        if newsletters and email:
            for newsletter in newsletters:
                newsletter.subscribe(person.first_name, person.last_name,
                                     email)

        context.person = person
        if manager:
            mail_template = root.get_mail_template(
                'accept_invitation',
                getattr(manager, 'user_locale', root.locale))
            localizer = request.localizer
            email_data = get_user_data(person, 'user', request)
            novaideo_title = request.root.title
            roles_translate = [
                localizer.translate(APPLICATION_ROLES.get(r, r)) for r in roles
            ]
            subject = mail_template['subject'].format(
                novaideo_title=novaideo_title, **email_data)
            email_data.update(get_user_data(manager, 'recipient', request))
            email_data.update(get_entity_data(person, 'user', request))
            message = mail_template['template'].format(
                roles=", ".join(roles_translate),
                novaideo_title=novaideo_title,
                **email_data)
            alert('email', [root.get_site_sender()], [manager.email],
                  subject=subject,
                  body=message)

        return {}
예제 #4
0
class InviteUsersSchema(Schema):

    invitations = colander.SchemaNode(
                colander.Sequence(),
                select(omit(InvitationSchema(factory=Invitation,
                                         editable=True,
                                         name='Invitation',
                                         widget=SimpleMappingWidget(css_class='object-well default-well')), 
                            ['_csrf_token_']), 
                       ['user_title', 'roles', 'first_name', 
                       'last_name','email']),
                widget=SequenceWidget(min_len=1),
                title=_('The invitations')
                )
예제 #5
0
    def before_update(self):
        if not has_role(role=('Moderator', )):
            self.schema = select(
                InvitationSchema(editable=True),
                ['title', 'user_title', 'first_name', 'last_name', 'email'])

        self.action = self.request.resource_url(
            self.context,
            'novaideoapi',
            query={
                'op': 'update_action_view',
                'node_id': EditInvitation.node_definition.id
            })
        self.schema.widget = deform.widget.FormWidget(
            css_class='deform novaideo-ajax-form')