Beispiel #1
0
    def start(self, context, request, appstruct, **kw):
        context.state.remove('pending')
        context.state.append('refused')
        context.modified_at = datetime.datetime.now(tz=pytz.UTC)
        context.reindex()
        manager = context.manager
        if manager:
            root = getSite()
            mail_template = root.get_mail_template(
                'refuse_invitation',
                getattr(manager, 'user_locale', root.locale))
            localizer = request.localizer
            email_data = get_user_data(context, 'user', request)
            novaideo_title = request.root.title
            roles_translate = [
                localizer.translate(APPLICATION_ROLES.get(r, r))
                for r in context.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(context, 'invitation', 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 {}
Beispiel #2
0
    def _alert_users(self, context, request, user, answer):
        root = getSite()
        users = self._get_users_to_alerts(context, request)
        if user in users:
            users.remove(user)

        author_data = get_user_data(user, 'author', request)
        alert_data = get_entity_data(answer, 'comment', request)
        alert_data.update(author_data)
        alert('internal', [root], users,
              internal_kind=InternalAlertKind.content_alert,
              alert_kind='new_answer',
              subjects=[context],
              **alert_data)
        subject_data = get_entity_data(context, 'subject', request)
        alert_data.update(subject_data)
        for user_to_alert in [u for u in users if getattr(u, 'email', '')]:
            mail_template = root.get_mail_template(
                'alert_answer', user_to_alert.user_locale)
            subject = mail_template['subject'].format(
                **subject_data)
            email_data = get_user_data(user_to_alert, 'recipient', request)
            email_data.update(alert_data)
            message = mail_template['template'].format(
                novaideo_title=root.title,
                **email_data
            )
            alert('email', [root.get_site_sender()], [user_to_alert.email],
                  subject=subject, body=message)
Beispiel #3
0
 def _alert_users(self, context, request, user, comment, channel):
     root = getSite()
     users = self._get_users_to_alerts(context, request, user, channel)
     author_data = get_user_data(user, 'author', request)
     alert_data = get_entity_data(comment, 'comment', request)
     alert_data.update(author_data)
     alert('internal', [root],
           users,
           internal_kind=InternalAlertKind.comment_alert,
           subjects=[channel],
           comment_kind='discuss',
           **alert_data)
     subject_data = get_entity_data(user, 'subject', request)
     alert_data.update(subject_data)
     for user_to_alert in [u for u in users if getattr(u, 'email', '')]:
         mail_template = root.get_mail_template('alert_discuss',
                                                user_to_alert.user_locale)
         subject = mail_template['subject'].format(**subject_data)
         email_data = get_user_data(user_to_alert, 'recipient', request)
         email_data.update(alert_data)
         message = mail_template['template'].format(
             novaideo_title=root.title, **email_data)
         alert('email', [root.get_site_sender()], [user_to_alert.email],
               subject=subject,
               body=message)
Beispiel #4
0
    def start(self, context, request, appstruct, **kw):
        context.state.remove('pending')
        context.state.append('refused')
        context.modified_at = datetime.datetime.now(tz=pytz.UTC)
        context.reindex()
        manager = context.manager
        if manager:
            root = getSite()
            mail_template = root.get_mail_template(
                'refuse_invitation',
                getattr(manager, 'user_locale', root.locale))
            localizer = request.localizer
            email_data = get_user_data(context, 'user', request)
            novaideo_title = request.root.title
            roles_translate = [localizer.translate(APPLICATION_ROLES.get(r, r))
                               for r in context.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(context, 'invitation', 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 {}
Beispiel #5
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 {}
Beispiel #6
0
def get_ballot_alert_data(
        context, request,
        root, electors):
    alert_data = get_entity_data(context, 'subject', request)
    moderators_str = ""
    for index, elector in enumerate(electors):
        elector_data = get_user_data(
            elector, 'subject', request)
        elector_data['subject_email'] = elector.email
        elector_data['index'] = str(index+1)
        moderator_str = MODERATOR_DATA.format(
            **elector_data)
        moderators_str += "\n" + moderator_str

    alert_data['moderators'] = moderators_str
    alert_data['url_terms_of_use'] = request.resource_url(
        root.terms_of_use, '@@index')
    alert_data['url_moderation_rules'] = request.resource_url(
        root.moderation_rules, '@@index')
    duration = getattr(root, 'duration_moderation_vote', 7)
    date_end = datetime.datetime.now() + \
        datetime.timedelta(days=duration)
    alert_data['date_end_vote'] = to_localized_time(
        date_end, request, translate=True)
    alert_data['duration'] = duration
    alert_data['novaideo_title'] = root.title
    return alert_data
Beispiel #7
0
    def start(self, context, request, appstruct, **kw):
        context.state = PersistentList(['votes for amendments', 'published'])
        wg = context.working_group
        if 'closed' not in wg.state:
            wg.state.append('closed')

        context.reindex()
        members = wg.members
        root = request.root
        alert('internal', [root],
              members,
              internal_kind=InternalAlertKind.working_group_alert,
              subjects=[context],
              alert_kind='voting_amendment')
        subject_data = get_entity_data(context, 'subject', request)
        for member in members:
            if getattr(member, 'email', ''):
                mail_template = root.get_mail_template('start_vote_amendments',
                                                       member.user_locale)
                subject = mail_template['subject'].format(
                    subject_title=context.title)
                email_data = get_user_data(member, 'recipient', request)
                email_data.update(subject_data)
                message = mail_template['template'].format(
                    novaideo_title=root.title, **email_data)
                alert('email', [root.get_site_sender()], [member.email],
                      subject=subject,
                      body=message)

        return {}
Beispiel #8
0
 def _send_ballot_result(self, context, request, electeds, members):
     root = request.root
     working_group = context.working_group
     ballots_urls = [(ballot.title,
                      request.resource_url(root,
                                           '@@seeballot',
                                           query={'id': get_oid(ballot)}))
                     for ballot in working_group.amendments_ballots]
     values = {
         'ballots': ballots_urls,
         'electeds': electeds,
         'subject': context
     }
     result_body = renderers.render(self.amendments_vote_result_template,
                                    values, request)
     alert('internal', [root],
           members,
           internal_kind=InternalAlertKind.working_group_alert,
           subjects=[context],
           alert_kind='amendment_result',
           ballots=ballots_urls)
     for member in members:
         if getattr(member, 'email', ''):
             mail_template = root.get_mail_template('vote_amendment_result',
                                                    member.user_locale)
             subject = mail_template['subject'].format(
                 subject_title=context.title)
             recipientdata = get_user_data(member, 'recipient', request)
             message = mail_template['template'].format(
                 message_result=result_body,
                 novaideo_title=root.title,
                 **recipientdata)
             alert('email', [root.get_site_sender()], [member.email],
                   subject=subject,
                   html=message)
Beispiel #9
0
    def start(self, context, request, appstruct, **kw):
        root = request.root
        url = request.resource_url(context, "")
        deadline_date = context.init_deadline(
            datetime.datetime.now(tz=pytz.UTC))
        deadline_str = to_localized_time(deadline_date,
                                         request,
                                         translate=True)
        mail_template = root.get_mail_template(
            'preregistration', getattr(context, 'locale', root.locale))
        email_data = get_user_data(context, 'recipient', request)
        subject = mail_template['subject'].format(novaideo_title=root.title)
        deadline_str = to_localized_time(deadline_date,
                                         request,
                                         translate=True)
        message = mail_template['template'].format(
            url=url,
            deadline_date=deadline_str.lower(),
            novaideo_title=root.title,
            **email_data)
        alert('email', [root.get_site_sender()], [context.email],
              subject=subject,
              body=message)

        request.registry.notify(
            ActivityExecuted(self, [context], get_current()))
        return {}
Beispiel #10
0
    def start(self, context, request, appstruct, **kw):
        #improvement_cycle TODO no improve
        members = context.working_group.members
        root = request.root
        alert('internal', [root],
              members,
              internal_kind=InternalAlertKind.working_group_alert,
              subjects=[context],
              alert_kind='no_amendment')
        subject_data = get_entity_data(context, 'subject', request)
        for member in members:
            if getattr(member, 'email', ''):
                mail_template = root.get_mail_template('alert_amendment',
                                                       member.user_locale)
                subject = mail_template['subject'].format(
                    subject_title=context.title)
                email_data = get_user_data(member, 'recipient', request)
                email_data.update(subject_data)
                message = mail_template['template'].format(
                    novaideo_title=request.root.title, **email_data)
                alert('email', [root.get_site_sender()], [member.email],
                      subject=subject,
                      body=message)

        return {}
Beispiel #11
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        invitations = appstruct['invitations']
        user = get_current()
        mail_template = root.get_mail_template('invitation')
        localizer = request.localizer
        novaideo_title = root.title
        for invitation_dict in invitations:
            invitation = invitation_dict['_object_data']
            invitation.state.append('pending')
            invitation.setproperty('manager', user)
            invitation.__name__ = gen_random_token()
            root.addtoproperty('invitations', invitation)
            if not getattr(invitation, 'roles', []):
                invitation.roles = DEFAULT_ROLES

            roles_translate = [localizer.translate(APPLICATION_ROLES.get(r, r))
                               for r in invitation.roles]
            subject = mail_template['subject'].format(
                novaideo_title=novaideo_title
            )
            email_data = get_user_data(invitation, 'recipient', request)
            email_data.update(get_entity_data(
                invitation, 'invitation', request))
            message = mail_template['template'].format(
                roles=", ".join(roles_translate),
                novaideo_title=novaideo_title,
                **email_data)
            alert('email', [root.get_site_sender()], [invitation.email],
                  subject=subject, body=message)

        return {}
Beispiel #12
0
    def start(self, context, request, appstruct, **kw):
        context.state = PersistentList(['votes for amendments', 'published'])
        wg = context.working_group
        if 'closed' not in wg.state:
            wg.state.append('closed')

        context.reindex()
        members = wg.members
        root = request.root
        alert('internal', [root], members,
              internal_kind=InternalAlertKind.working_group_alert,
              subjects=[context], alert_kind='voting_amendment')
        subject_data = get_entity_data(context, 'subject', request)
        for member in members:
            if getattr(member, 'email', ''):
                mail_template = root.get_mail_template(
                    'start_vote_amendments', member.user_locale)
                subject = mail_template['subject'].format(subject_title=context.title)
                email_data = get_user_data(member, 'recipient', request)
                email_data.update(subject_data)
                message = mail_template['template'].format(
                    novaideo_title=root.title,
                    **email_data
                )
                alert('email', [root.get_site_sender()], [member.email],
                      subject=subject, body=message)

        return {}
Beispiel #13
0
 def _send_ballot_result(self, context, request, electeds, members):
     root = request.root
     working_group = context.working_group
     ballots_urls = [(ballot.title, request.resource_url(
                     root, '@@seeballot', query={'id': get_oid(ballot)}))
                     for ballot in working_group.amendments_ballots]
     values = {'ballots': ballots_urls,
               'electeds': electeds,
               'subject': context}
     result_body = renderers.render(
         self.amendments_vote_result_template, values, request)
     alert(
         'internal', [root], members,
         internal_kind=InternalAlertKind.working_group_alert,
         subjects=[context],
         alert_kind='amendment_result',
         ballots=ballots_urls)
     for member in members:
         if getattr(member, 'email', ''):
             mail_template = root.get_mail_template(
                 'vote_amendment_result', member.user_locale)
             subject = mail_template['subject'].format(
                 subject_title=context.title)
             recipientdata = get_user_data(member, 'recipient', request)
             message = mail_template['template'].format(
                 message_result=result_body,
                 novaideo_title=root.title,
                 **recipientdata
             )
             alert('email', [root.get_site_sender()], [member.email],
                   subject=subject, html=message)
Beispiel #14
0
    def start(self, context, request, appstruct, **kw):
        root = request.root
        url = request.resource_url(context, "")
        deadline_date = context.init_deadline(
            datetime.datetime.now(tz=pytz.UTC))
        deadline_str = to_localized_time(
            deadline_date, request, translate=True)
        mail_template = root.get_mail_template(
            'preregistration', getattr(context, 'locale', root.locale))
        email_data = get_user_data(context, 'recipient', request)
        subject = mail_template['subject'].format(
            novaideo_title=root.title)
        deadline_str = to_localized_time(
            deadline_date, request, translate=True)
        message = mail_template['template'].format(
            url=url,
            deadline_date=deadline_str.lower(),
            novaideo_title=root.title,
            **email_data)
        alert('email', [root.get_site_sender()], [context.email],
              subject=subject, body=message)

        request.registry.notify(ActivityExecuted(
            self, [context], get_current()))
        return {}
Beispiel #15
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        explanation = appstruct['explanation']
        context.state = PersistentList(['archived'])
        context.reindex()
        user = context.author
        alert('internal', [root], [user],
              internal_kind=InternalAlertKind.moderation_alert,
              subjects=[context], alert_kind='object_archive')
        if getattr(user, 'email', ''):
            mail_template = root.get_mail_template(
                'archive_content_decision', user.user_locale)
            subject = mail_template['subject'].format(
                subject_title=context.title)
            email_data = get_user_data(user, 'recipient', request)
            email_data.update(get_entity_data(context, 'subject', request))
            message = mail_template['template'].format(
                explanation=explanation,
                novaideo_title=root.title,
                **email_data
            )
            alert('email', [root.get_site_sender()], [user.email],
                  subject=subject, body=message)

        return {}
Beispiel #16
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        invitations = appstruct['invitations']
        user = get_current()
        mail_template = root.get_mail_template('invitation')
        localizer = request.localizer
        novaideo_title = root.title
        for invitation_dict in invitations:
            invitation = invitation_dict['_object_data']
            invitation.state.append('pending')
            invitation.setproperty('manager', user)
            invitation.__name__ = gen_random_token()
            root.addtoproperty('invitations', invitation)
            if not getattr(invitation, 'roles', []):
                invitation.roles = DEFAULT_ROLES

            roles_translate = [
                localizer.translate(APPLICATION_ROLES.get(r, r))
                for r in invitation.roles
            ]
            subject = mail_template['subject'].format(
                novaideo_title=novaideo_title)
            email_data = get_user_data(invitation, 'recipient', request)
            email_data.update(
                get_entity_data(invitation, 'invitation', request))
            message = mail_template['template'].format(
                roles=", ".join(roles_translate),
                novaideo_title=novaideo_title,
                **email_data)
            alert('email', [root.get_site_sender()], [invitation.email],
                  subject=subject,
                  body=message)

        return {}
Beispiel #17
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        explanation = appstruct['explanation']
        context.state = PersistentList(['archived'])
        context.reindex()
        user = context.author
        alert('internal', [root], [user],
              internal_kind=InternalAlertKind.moderation_alert,
              subjects=[context],
              alert_kind='object_archive')
        if getattr(user, 'email', ''):
            mail_template = root.get_mail_template('archive_content_decision',
                                                   user.user_locale)
            subject = mail_template['subject'].format(
                subject_title=context.title)
            email_data = get_user_data(user, 'recipient', request)
            email_data.update(get_entity_data(context, 'subject', request))
            message = mail_template['template'].format(
                explanation=explanation,
                novaideo_title=root.title,
                **email_data)
            alert('email', [root.get_site_sender()], [user.email],
                  subject=subject,
                  body=message)

        return {}
Beispiel #18
0
    def start(self, context, request, appstruct, **kw):
        data = context.get_data(PersonSchema())
        annotations = getattr(context, 'annotations',
                              {}).get(PROCESS_HISTORY_KEY, [])
        data.update({'password': appstruct['password']})
        data = {
            key: value
            for key, value in data.items() if value is not colander.null
        }
        data.pop('title')
        root = getSite()
        locale = my_locale_negotiator(request)
        data['locale'] = locale
        person = Person(**data)
        principals = find_service(root, 'principals')
        name = person.first_name + ' ' + person.last_name
        users = principals['users']
        name = name_chooser(users, name=name)
        users[name] = person
        grant_roles(person, roles=('Member', ))
        grant_roles(person, (('Owner', person), ))
        person.state.append('active')
        oid = str(get_oid(context))
        get_socket().send_pyobj(('stop', 'persistent_' + oid))
        organization = context.organization
        if organization:
            person.setproperty('organization', organization)

        root.delfromproperty('preregistrations', context)
        person.init_annotations()
        person.annotations.setdefault(PROCESS_HISTORY_KEY,
                                      PersistentList()).extend(annotations)
        person.reindex()
        request.registry.notify(ActivityExecuted(self, [person], person))
        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)

        transaction.commit()
        if email:
            mail_template = root.get_mail_template('registration_confiramtion',
                                                   person.user_locale)
            subject = mail_template['subject'].format(
                novaideo_title=root.title)
            recipientdata = get_user_data(person, 'recipient', request)
            message = mail_template['template'].format(
                login_url=request.resource_url(root, '@@login'),
                novaideo_title=root.title,
                **recipientdata)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject,
                  body=message)

        return {'person': person}
Beispiel #19
0
def run_notation_process(context, request, user, members, alert_id=None):
    if members:
        subjects = [context]
        title = _('Mark of the cooperative behaviour of ${member}',
                  mapping={'member': user.title})
        ballot = Ballot('FPTP',
                        members,
                        subjects,
                        DURATION,
                        vote_process_id='membernotationmanagement',
                        group_values=NOTATIONS,
                        group_default=DEFAULT_NOTATION,
                        group=NOTATION_GROUP)
        context.addtoproperty('ballots', ballot)
        ballot.title = title
        ballot.report.description_template = 'novaideo:views/templates/ballots/member_notation.pt'
        processes = ballot.run_ballot(context=context)
        for process in processes:
            process.execution_context.add_involved_entity('member', user)

        if alert_id:
            root = getSite()
            alert_data = get_user_data(user, 'user', request)
            alert_data.update(get_entity_data(user, 'user', request))
            alert('internal', [root],
                  members,
                  internal_kind=InternalAlertKind.working_group_alert,
                  subjects=[context],
                  alert_kind=alert_id,
                  **alert_data)
            alert_data.update(get_entity_data(context, 'subject', request))
            for member in [a for a in members if getattr(a, 'email', '')]:
                mail_template = root.get_mail_template(alert_id,
                                                       member.user_locale)
                subject = mail_template['subject'].format(
                    novaideo_title=root.title, **alert_data)
                email_data = get_user_data(member, 'recipient', request)
                alert_data.update(email_data)
                message = mail_template['template'].format(
                    novaideo_title=root.title, **alert_data)
                alert('email', [root.get_site_sender()], [member.email],
                      subject=subject,
                      body=message)
Beispiel #20
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        if root.support_ideas:
            context.state = PersistentList(['submitted_support', 'published'])
        else:
            context.state = PersistentList(['published', 'submitted_support'])

        context.init_published_at()
        root.merge_keywords(context.keywords)
        context.reindex()
        user = context.author
        alert('internal', [root], [user],
              internal_kind=InternalAlertKind.moderation_alert,
              subjects=[context], alert_kind='moderation')
        if context.originalentity:
            # Add Nia comment
            alert_comment_nia(
                context.originalentity, request, root,
                internal_kind=InternalAlertKind.content_alert,
                subject_type='idea',
                alert_kind='duplicated',
                duplication=context
                )

        transformed_from = context.transformed_from
        if transformed_from:
            context_type = transformed_from.__class__.__name__.lower()
            # Add Nia comment
            alert_comment_nia(
                transformed_from, request, root,
                internal_kind=InternalAlertKind.content_alert,
                subject_type=context_type,
                alert_kind='transformation_idea',
                idea=context
                )

        if getattr(user, 'email', ''):
            mail_template = root.get_mail_template(
                'publish_idea_decision', user.user_locale)
            subject = mail_template['subject'].format(
                subject_title=context.title)
            email_data = get_user_data(user, 'recipient', request)
            email_data.update(get_entity_data(context, 'subject', request))
            message = mail_template['template'].format(
                novaideo_title=root.title,
                **email_data
            )
            alert('email', [root.get_site_sender()], [user.email],
                  subject=subject, body=message)

        request.registry.notify(ObjectPublished(object=context))
        request.registry.notify(ActivityExecuted(
            self, [context], get_current(request)))
        return {}
Beispiel #21
0
def default_message(node, kw):
    context = node.bindings['context']
    request = node.bindings['request']
    mail_template = node.bindings['mail_template']
    email_data = get_user_data(get_current(request), 'my', request)
    email_data.update(get_entity_data(context, 'subject', request))
    return mail_template['template'].format(recipient_title='',
                                            recipient_first_name='',
                                            recipient_last_name='',
                                            novaideo_title=request.root.title,
                                            **email_data)
Beispiel #22
0
    def start(self, context, request, appstruct, **kw):
        data = context.get_data(PersonSchema())
        annotations = getattr(context, 'annotations', {}).get(PROCESS_HISTORY_KEY, [])
        data.update({'password': appstruct['password']})
        data = {key: value for key, value in data.items()
                if value is not colander.null}
        data.pop('title')
        root = getSite()
        locale = my_locale_negotiator(request)
        data['locale'] = locale
        person = Person(**data)
        principals = find_service(root, 'principals')
        name = person.first_name + ' ' + person.last_name
        users = principals['users']
        name = name_chooser(users, name=name)
        users[name] = person
        grant_roles(person, roles=('Member',))
        grant_roles(person, (('Owner', person),))
        person.state.append('active')
        oid = str(get_oid(context))
        get_socket().send_pyobj(('stop', 'persistent_' + oid))
        organization = context.organization
        if organization:
            person.setproperty('organization', organization)

        root.delfromproperty('preregistrations', context)
        person.init_annotations()
        person.annotations.setdefault(
            PROCESS_HISTORY_KEY, PersistentList()).extend(annotations)
        person.reindex()
        request.registry.notify(ActivityExecuted(self, [person], person))
        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)

        transaction.commit()
        if email:
            mail_template = root.get_mail_template(
                'registration_confiramtion', person.user_locale)
            subject = mail_template['subject'].format(
                novaideo_title=root.title)
            recipientdata = get_user_data(person, 'recipient', request)
            message = mail_template['template'].format(
                login_url=request.resource_url(root, '@@login'),
                novaideo_title=root.title,
                **recipientdata)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject, body=message)

        return {'person': person}
Beispiel #23
0
 def _alert_users(self, context, request, user, comment, channel):
     root = getSite()
     users = self._get_users_to_alerts(context, request, user, channel)
     comment_oid = getattr(comment, '__oid__', 'None')
     authordata = get_user_data(user, 'author', request)
     alert('internal', [root], users, exclude=[user],
           internal_kind=InternalAlertKind.comment_alert,
           subjects=[channel],
           comment_oid=comment_oid,
           comment_content=comment.comment,
           comment_kind='general_discuss',
           **authordata)
Beispiel #24
0
def default_message(node, kw):
    context = node.bindings['context']
    request = node.bindings['request']
    mail_template = node.bindings['mail_template']
    email_data = get_user_data(get_current(request), 'my', request)
    email_data.update(get_entity_data(context, 'subject', request))
    return mail_template['template'].format(
        recipient_title='',
        recipient_first_name='',
        recipient_last_name='',
        novaideo_title=request.root.title,
        **email_data
    )
Beispiel #25
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        report = appstruct['_object_data']
        context.addtoproperty('reports', report)
        report.state.append('pending')
        context.state.append('reported')
        grant_roles(user=user, roles=(('Owner', report), ))
        report.setproperty('author', user)
        report.reindex()
        context.reindex()
        if hasattr(user, 'add_report'):
            user.add_report(context)

        root = getSite()
        # get random moderators
        ballots = [
            b for b in getattr(context, 'ballot_processes', [])
            if b.id == 'contentreportdecision'
        ]
        if not ballots:
            moderators = get_random_users(ELECTORS_NB, [context.author])
            if not moderators:
                ignore(context, request, root)
            else:
                author = context.author

                def before_start(b_proc):
                    b_proc.content = context

                start_ballot(context,
                             author,
                             request,
                             root,
                             moderators,
                             'contentreportdecision',
                             before_start=before_start,
                             initiator=user,
                             subjects=[context])
                alert_data = get_ballot_alert_data(context, request, root,
                                                   moderators)
                alert_data.update(get_user_data(author, 'recipient', request))
                mail_template = root.get_mail_template('alert_report',
                                                       author.user_locale)
                if mail_template:
                    subject = mail_template['subject'].format(**alert_data)
                    message = mail_template['template'].format(**alert_data)
                    alert('email', [root.get_site_sender()], [author.email],
                          subject=subject,
                          body=message)

        return {}
Beispiel #26
0
 def _alert_users(self, context, request, user, comment, channel):
     root = getSite()
     users = self._get_users_to_alerts(context, request, user, channel)
     comment_oid = getattr(comment, '__oid__', 'None')
     authordata = get_user_data(user, 'author', request)
     alert('internal', [root],
           users,
           exclude=[user],
           internal_kind=InternalAlertKind.comment_alert,
           subjects=[channel],
           comment_oid=comment_oid,
           comment_content=comment.comment,
           comment_kind='general_discuss',
           **authordata)
Beispiel #27
0
    def start(self, context, request, appstruct, **kw):
        send_to_me = appstruct['send_to_me']
        members = list(appstruct['members'])
        root = request.root
        user = get_current(request)
        if send_to_me:
            members.append(user)

        userdata = get_user_data(user, 'my', request)
        presentation_subject = appstruct['subject']
        presentation_message = appstruct['message']
        subject = presentation_subject.format(subject_title=context.title)
        users = [m for m in members if not isinstance(m, str)]
        alert('internal', [root], users,
              internal_kind=InternalAlertKind.content_alert,
              subjects=[context], alert_kind='present')
        email_data = get_entity_data(context, 'subject', request)
        email_data.update(userdata)
        for member in members:
            email_member_data = get_user_data(member, 'recipient', request)
            email_member_data.update(email_data)
            member_email = getattr(member, 'email', '') \
                if not isinstance(member, str) else member
            if member_email:
                message = presentation_message.format(
                    novaideo_title=root.title,
                    **email_member_data
                )
                alert('email', [root.get_site_sender()], [member_email],
                      subject=subject, body=message)

            if member is not user and member_email \
               and member_email not in context._email_persons_contacted:
                context._email_persons_contacted.append(
                    member_email)

        return {}
Beispiel #28
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        moderators = self.process.execution_context.get_involved_collection(
            'electors')
        alert('internal', [root],
              moderators,
              internal_kind=InternalAlertKind.moderation_alert,
              subjects=[context],
              alert_kind='moderate_report')
        subject_data = get_entity_data(context, 'subject', request)
        subject_data.update(get_user_data(context, 'subject', request))
        duration = getattr(root, 'duration_moderation_vote', 7)
        date_end = datetime.datetime.now() + \
            datetime.timedelta(days=duration)
        date_end_vote = to_localized_time(date_end, request, translate=True)
        subject_data['url_moderation_rules'] = request.resource_url(
            root.moderation_rules, '@@index')
        for moderator in [a for a in moderators if getattr(a, 'email', '')]:
            mail_template = root.get_mail_template('moderate_report',
                                                   moderator.user_locale)
            subject = mail_template['subject'].format(
                novaideo_title=root.title)
            email_data = get_user_data(moderator, 'recipient', request)
            email_data.update(subject_data)
            message = mail_template['template'].format(
                novaideo_title=root.title,
                subject_email=getattr(context, 'email', ''),
                date_end_vote=date_end_vote,
                duration=duration,
                **email_data)
            alert('email', [root.get_site_sender()], [moderator.email],
                  subject=subject,
                  body=message)

        request.registry.notify(
            ActivityExecuted(self, [context], get_current()))
        return {}
Beispiel #29
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     mail_template = root.get_mail_template('invitation')
     localizer = request.localizer
     roles_translate = [localizer.translate(APPLICATION_ROLES.get(r, r))
                        for r in getattr(context, 'roles', [])]
     subject = mail_template['subject'].format(
         novaideo_title=root.title
     )
     email_data = get_user_data(context, 'recipient', request)
     email_data.update(get_entity_data(context, 'invitation', request))
     message = mail_template['template'].format(
         roles=", ".join(roles_translate),
         novaideo_title=root.title,
         **email_data)
     alert('email', [root.get_site_sender()], [context.email],
           subject=subject, body=message)
     return {}
Beispiel #30
0
 def start(self, context, request, appstruct, **kw):
     root = getSite()
     mail_template = root.get_mail_template('invitation')
     localizer = request.localizer
     roles_translate = [
         localizer.translate(APPLICATION_ROLES.get(r, r))
         for r in getattr(context, 'roles', [])
     ]
     subject = mail_template['subject'].format(novaideo_title=root.title)
     email_data = get_user_data(context, 'recipient', request)
     email_data.update(get_entity_data(context, 'invitation', request))
     message = mail_template['template'].format(
         roles=", ".join(roles_translate),
         novaideo_title=root.title,
         **email_data)
     alert('email', [root.get_site_sender()], [context.email],
           subject=subject,
           body=message)
     return {}
Beispiel #31
0
    def start(self, context, request, appstruct, **kw):
        appstruct.pop('_csrf_token_')
        context.opinion = PersistentDict(appstruct)
        context.state = PersistentList(
            ['examined', 'published', context.opinion['opinion']])
        context.init_examined_at()
        context.remove_tokens()
        context.reindex()
        member = context.author
        root = getSite()
        users = list(get_users_by_preferences(context))
        users.append(member)
        alert(
            'internal', [root], users,
            internal_kind=InternalAlertKind.examination_alert,
            subjects=[context])
        # Add Nia comment
        alert_comment_nia(
            context, request, root,
            internal_kind=InternalAlertKind.examination_alert,
            subject_type='idea'
            )
        if getattr(member, 'email', ''):
            mail_template = root.get_mail_template(
                'opinion_idea', member.user_locale)
            subject = mail_template['subject'].format(
                subject_title=context.title)
            localizer = request.localizer
            email_data = get_user_data(member, 'recipient', request)
            email_data.update(get_entity_data(context, 'subject', request))
            message = mail_template['template'].format(
                opinion=localizer.translate(_(context.opinion_value)),
                explanation=context.opinion['explanation'],
                novaideo_title=root.title,
                **email_data
            )
            alert('email', [root.get_site_sender()], [member.email],
                  subject=subject, body=message)

        request.registry.notify(ActivityExecuted(
            self, [context], get_current(request)))
        return {}
Beispiel #32
0
def mysubscriber_object_modified(event):
    content = event.object
    args = event.args
    state_source = args.get('state_source', '')
    state_target = args.get('state_target', '')
    request = get_current_request()
    users = get_users_by_preferences(content)
    root = request.root
    localizer = request.localizer
    subject_data = get_entity_data(content, 'subject', request)
    all_users = []
    for member in users:
        all_users.append(member)
        if getattr(member, 'email', ''):
            mail_template = root.get_mail_template('alert_content_modified',
                                                   member.user_locale)
            subject = mail_template['subject'].format(**subject_data)
            state_source_translate = state_source
            state_target_translate = state_target
            if state_source:
                state_source_translate = localizer.translate(
                    get_states_mapping(member, content, state_source))
            if state_target:
                state_target_translate = localizer.translate(
                    get_states_mapping(member, content, state_target))

            email_data = get_user_data(member, 'recipient', request)
            email_data.update(subject_data)
            message = mail_template['template'].format(
                state_source=state_source_translate,
                state_target=state_target_translate,
                novaideo_title=root.title,
                **email_data)
            alert('email', [root.get_site_sender()], [member.email],
                  subject=subject,
                  body=message)

    alert('internal', [root],
          all_users,
          internal_kind=InternalAlertKind.content_alert,
          subjects=[content],
          alert_kind='modified')
Beispiel #33
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        context.state = PersistentList(['published', 'pending'])
        context.init_published_at()
        root.merge_keywords(context.keywords)
        context.reindex()
        user = appstruct.get('user', get_current(request))
        author = context.author
        alert('internal', [root], [author],
              internal_kind=InternalAlertKind.moderation_alert,
              subjects=[context], alert_kind='moderation')
        # transformed_from = context.transformed_from
        # if transformed_from:
        #     context_type = transformed_from.__class__.__name__.lower()
        #     # Add Nia comment
        #     alert_comment_nia(
        #         transformed_from, request, root,
        #         internal_kind=InternalAlertKind.content_alert,
        #         subject_type=context_type,
        #         alert_kind='transformation_challenge',
        #         idea=context
        #         )

        if user is not author and getattr(author, 'email', ''):
            mail_template = root.get_mail_template(
                'publish_challenge_decision', user.user_locale)
            subject = mail_template['subject'].format(
                subject_title=context.title)
            email_data = get_user_data(author, 'recipient', request)
            email_data.update(get_entity_data(context, 'subject', request))
            message = mail_template['template'].format(
                novaideo_title=root.title,
                **email_data
            )
            alert('email', [root.get_site_sender()], [author.email],
                  subject=subject, body=message)

        request.registry.notify(ObjectPublished(object=context))
        request.registry.notify(ActivityExecuted(
            self, [context], user))
        return {}
Beispiel #34
0
    def start(self, context, request, appstruct, **kw):
        preregistration = appstruct['_object_data']
        preregistration.__name__ = gen_random_token()
        preregistration.locale = my_locale_negotiator(request)
        root = getSite()
        root.addtoproperty('preregistrations', preregistration)
        deadline = DEADLINE_PREREGISTRATION * 1000
        call_id = 'persistent_' + str(get_oid(preregistration))
        push_callback_after_commit(remove_expired_preregistration_callback,
                                   deadline,
                                   call_id,
                                   root=root,
                                   preregistration=preregistration)
        preregistration.state.append('pending')
        preregistration.reindex()
        transaction.commit()
        if not getattr(root, 'moderate_registration', False):
            accept_preregistration(request, preregistration, root)
        else:
            admins = get_users_with_role(role='SiteAdmin')
            alert('internal', [root],
                  admins,
                  internal_kind=InternalAlertKind.admin_alert,
                  subjects=[preregistration],
                  alert_kind='new_registration')
            url = request.resource_url(preregistration, '@@index')
            for admin in [a for a in admins if getattr(a, 'email', '')]:
                mail_template = root.get_mail_template(
                    'moderate_preregistration', admin.user_locale)
                subject = mail_template['subject'].format(
                    novaideo_title=root.title)
                email_data = get_user_data(admin, 'recipient', request)
                message = mail_template['template'].format(
                    url=url, novaideo_title=root.title, **email_data)
                alert('email', [root.get_site_sender()], [admin.email],
                      subject=subject,
                      body=message)

        request.registry.notify(ActivityExecuted(self, [preregistration],
                                                 None))
        return {'preregistration': preregistration}
Beispiel #35
0
def accept_preregistration(request, preregistration, root):
    preregistration.init_deadline(datetime.datetime.now(tz=pytz.UTC))
    if getattr(preregistration, 'email', ''):
        deadline_date = preregistration.get_deadline_date()
        locale = my_locale_negotiator(request)
        url = request.resource_url(preregistration, "")
        mail_template = root.get_mail_template(
            'preregistration', getattr(preregistration, 'locale', locale))
        email_data = get_user_data(preregistration, 'recipient', request)
        subject = mail_template['subject'].format(novaideo_title=root.title)
        deadline_str = to_localized_time(deadline_date,
                                         request,
                                         translate=True)
        message = mail_template['template'].format(
            url=url,
            deadline_date=deadline_str.lower(),
            novaideo_title=root.title,
            **email_data)
        alert('email', [root.get_site_sender()], [preregistration.email],
              subject=subject,
              body=message)
Beispiel #36
0
def accept_preregistration(request, preregistration, root):
    preregistration.init_deadline(datetime.datetime.now(tz=pytz.UTC))
    if getattr(preregistration, 'email', ''):
        deadline_date = preregistration.get_deadline_date()
        locale = my_locale_negotiator(request)
        url = request.resource_url(preregistration, "")
        mail_template = root.get_mail_template(
            'preregistration', getattr(preregistration, 'locale', locale))
        email_data = get_user_data(preregistration, 'recipient', request)
        subject = mail_template['subject'].format(
            novaideo_title=root.title)
        deadline_str = to_localized_time(
            deadline_date, request, translate=True)
        message = mail_template['template'].format(
            url=url,
            deadline_date=deadline_str.lower(),
            novaideo_title=root.title,
            **email_data
            )
        alert('email', [root.get_site_sender()], [preregistration.email],
              subject=subject, body=message)
Beispiel #37
0
    def start(self, context, request, appstruct, **kw):
        preregistration = appstruct['_object_data']
        preregistration.__name__ = gen_random_token()
        preregistration.locale = my_locale_negotiator(request)
        root = getSite()
        root.addtoproperty('preregistrations', preregistration)
        deadline = DEADLINE_PREREGISTRATION * 1000
        call_id = 'persistent_' + str(get_oid(preregistration))
        push_callback_after_commit(
            remove_expired_preregistration_callback, deadline, call_id,
            root=root, preregistration=preregistration)
        preregistration.state.append('pending')
        preregistration.reindex()
        transaction.commit()
        if not getattr(root, 'moderate_registration', False):
            accept_preregistration(request, preregistration, root)
        else:
            admins = get_users_with_role(role='SiteAdmin')
            alert(
                'internal', [root], admins,
                internal_kind=InternalAlertKind.admin_alert,
                subjects=[preregistration], alert_kind='new_registration')
            url = request.resource_url(preregistration, '@@index')
            for admin in [a for a in admins if getattr(a, 'email', '')]:
                mail_template = root.get_mail_template(
                    'moderate_preregistration', admin.user_locale)
                subject = mail_template['subject'].format(
                    novaideo_title=root.title)
                email_data = get_user_data(admin, 'recipient', request)
                message = mail_template['template'].format(
                    url=url,
                    novaideo_title=root.title,
                    **email_data)
                alert('email', [root.get_site_sender()], [admin.email],
                      subject=subject, body=message)

        request.registry.notify(ActivityExecuted(self, [preregistration], None))
        return {'preregistration': preregistration}
Beispiel #38
0
    def start(self, context, request, appstruct, **kw):
        #improvement_cycle TODO no improve
        members = context.working_group.members
        root = request.root
        alert('internal', [root], members,
              internal_kind=InternalAlertKind.working_group_alert,
              subjects=[context], alert_kind='no_amendment')
        subject_data = get_entity_data(context, 'subject', request)
        for member in members:
            if getattr(member, 'email', ''):
                mail_template = root.get_mail_template(
                    'alert_amendment', member.user_locale)
                subject = mail_template['subject'].format(subject_title=context.title)
                email_data = get_user_data(member, 'recipient', request)
                email_data.update(subject_data)
                message = mail_template['template'].format(
                    novaideo_title=request.root.title,
                    **email_data
                )
                alert('email', [root.get_site_sender()], [member.email],
                      subject=subject, body=message)

        return {}
Beispiel #39
0
def mysubscriber_object_published(event):
    content = event.object
    author = getattr(content, 'author', None)
    tree = content.tree
    request = get_current_request()
    root = request.root
    challenge = getattr(content, 'challenge', None)
    query = None
    challeng_followers = []
    if getattr(challenge, 'is_restricted', False):
        novaideo_catalog = find_catalog('novaideo')
        challenges_index = novaideo_catalog['challenges']
        query = challenges_index.any([get_oid(challenge)])
    elif challenge:
        challeng_followers = get_users_by_preferences(challenge)
        alert('internal', [root],
              set(challeng_followers),
              internal_kind=InternalAlertKind.content_alert,
              subjects=[content],
              alert_kind='published_in_challenge')

    users = get_users_by_keywords(tree, query)
    subject_data = get_entity_data(content, 'subject', request)
    all_users = []
    for member in users:
        all_users.append(member)
        if getattr(member, 'email', '') and author is not member:
            mail_template = root.get_mail_template('alert_new_content',
                                                   member.user_locale)
            subject = mail_template['subject'].format(**subject_data)
            email_data = get_user_data(member, 'recipient', request)
            email_data.update(subject_data)
            message = mail_template['template'].format(
                novaideo_title=root.title, **email_data)
            alert('email', [root.get_site_sender()], [member.email],
                  subject=subject,
                  body=message)

    if author in all_users:
        all_users.remove(author)

    alert('internal', [root],
          set(all_users),
          internal_kind=InternalAlertKind.content_alert,
          subjects=[content],
          alert_kind='published')

    pref_author = get_users_by_preferences(author)
    all_users = [u for u in pref_author if u not in set(all_users)]
    alert('internal', [root],
          all_users,
          internal_kind=InternalAlertKind.content_alert,
          subjects=[content],
          alert_kind='published_author',
          member_url=request.resource_url(author, '@@index'),
          member_title=getattr(author, 'title', author.__name__))

    if getattr(content, 'original', None):
        original = content.original
        users = list(get_users_by_preferences(original))
        users.append(original.author)
        alert('internal', [root],
              set(users),
              internal_kind=InternalAlertKind.content_alert,
              subjects=[content],
              alert_kind='duplicated',
              url=request.resource_url(original, '@@index'),
              duplicate_title=original.title)
Beispiel #40
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 {}
Beispiel #41
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current()
        novaideo_catalog = find_catalog('novaideo')
        identifier_index = novaideo_catalog['identifier']
        user_titles = {str(i).lower(): str(i) for i in root.titles}
        title_template = u"""{title} {first_name} {last_name}"""
        mail_template = root.get_mail_template('invitation')
        localizer = request.localizer
        novaideo_title = root.title
        xlfile = appstruct['file']['_object_data']
        invitations_data = get_data_from_xl(file=xlfile,
                                            properties={
                                                'first_name':
                                                ('String', False),
                                                'last_name': ('String', False),
                                                'user_title':
                                                ('String', False),
                                                'email': ('String', False),
                                                'organization':
                                                ('String', False),
                                                'ismanager':
                                                ('Boolean', False),
                                                'roles': ('String', True)
                                            })
        for invitation_data in invitations_data:
            email = invitation_data['email']
            if email and invitation_data['first_name'] and invitation_data[
                    'last_name']:
                query = identifier_index.any([email])
                users = list(query.execute().all())
                if not users:
                    organization_title = invitation_data.pop(
                        'organization', None)
                    organizations = list(
                        get_entities_by_title([IOrganization],
                                              organization_title).all())
                    organization = organizations[0] if organizations else None

                    roles = invitation_data.get('roles', [])
                    roles = [
                        INVITATION_ROLES.get(r.lower()) for r in roles
                        if r.lower() in INVITATION_ROLES
                    ]
                    roles = roles or ['Member']
                    invitation_data['roles'] = roles

                    user_title = invitation_data['user_title']
                    invitation_data['user_title'] = user_titles.get(
                        user_title.lower(), 'Mr') if user_title else 'Mr'

                    invitation_data['title'] = title_template.format(
                        title=invitation_data['user_title'],
                        first_name=invitation_data['first_name'],
                        last_name=invitation_data['last_name'])
                    invitation = Invitation(**invitation_data)
                    invitation.state.append('pending')
                    invitation.setproperty('manager', user)
                    invitation.__name__ = gen_random_token()
                    if organization:
                        invitation.setproperty('organization', organization)

                    root.addtoproperty('invitations', invitation)
                    roles_translate = [
                        localizer.translate(APPLICATION_ROLES.get(r, r))
                        for r in getattr(invitation, 'roles', [])
                    ]

                    subject = mail_template['subject'].format(
                        novaideo_title=novaideo_title)
                    email_data = get_user_data(invitation, 'recipient',
                                               request)
                    email_data.update(
                        get_entity_data(invitation, 'invitation', request))
                    message = mail_template['template'].format(
                        roles=", ".join(roles_translate),
                        novaideo_title=novaideo_title,
                        **email_data)
                    alert('email', [root.get_site_sender()],
                          [invitation.email],
                          subject=subject,
                          body=message)

        return {}
Beispiel #42
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        user = get_current()
        novaideo_catalog = find_catalog('novaideo')
        identifier_index = novaideo_catalog['identifier']
        user_titles = {str(i).lower(): str(i) for i in root.titles}
        title_template = u"""{title} {first_name} {last_name}"""
        mail_template = root.get_mail_template('invitation')
        localizer = request.localizer
        novaideo_title = root.title
        xlfile = appstruct['file']['_object_data']
        invitations_data = get_data_from_xl(
            file=xlfile,
            properties={'first_name': ('String', False),
                        'last_name': ('String', False),
                        'user_title': ('String', False),
                        'email': ('String', False),
                        'organization': ('String', False),
                        'ismanager': ('Boolean', False),
                        'roles': ('String', True)})
        for invitation_data in invitations_data:
            email = invitation_data['email']
            if email and invitation_data['first_name'] and invitation_data['last_name']:
                query = identifier_index.any([email])
                users = list(query.execute().all())
                if not users:
                    organization_title = invitation_data.pop('organization', None)
                    organizations = list(get_entities_by_title(
                        [IOrganization], organization_title).all())
                    organization = organizations[0] if organizations else None

                    roles = invitation_data.get('roles', [])
                    roles = [INVITATION_ROLES.get(r.lower()) for
                             r in roles if r.lower() in INVITATION_ROLES]
                    roles = roles or ['Member']
                    invitation_data['roles'] = roles

                    user_title = invitation_data['user_title']
                    invitation_data['user_title'] = user_titles.get(
                        user_title.lower(), 'Mr') if user_title else 'Mr'

                    invitation_data['title'] = title_template.format(
                        title=invitation_data['user_title'],
                        first_name=invitation_data['first_name'],
                        last_name=invitation_data['last_name'])
                    invitation = Invitation(**invitation_data)
                    invitation.state.append('pending')
                    invitation.setproperty('manager', user)
                    invitation.__name__ = gen_random_token()
                    if organization:
                        invitation.setproperty('organization', organization)

                    root.addtoproperty('invitations', invitation)
                    roles_translate = [localizer.translate(APPLICATION_ROLES.get(r, r))
                                       for r in getattr(invitation, 'roles', [])]

                    subject = mail_template['subject'].format(
                        novaideo_title=novaideo_title
                    )
                    email_data = get_user_data(invitation, 'recipient', request)
                    email_data.update(get_entity_data(
                        invitation, 'invitation', request))
                    message = mail_template['template'].format(
                        roles=", ".join(roles_translate),
                        novaideo_title=novaideo_title,
                        **email_data)
                    alert('email', [root.get_site_sender()], [invitation.email],
                          subject=subject, body=message)

        return {}
Beispiel #43
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        anonymous = appstruct.get('anonymous', False)
        comment = appstruct['_object_data']
        context.addtoproperty('comments', comment)
        comment.format(request)
        user = appstruct.get('user', get_current())
        author = user if not anonymous else user.get_mask(root)
        comment.setproperty('author', author)
        comment.state = PersistentList(['published'])
        grant_roles(user=author, roles=(('Owner', comment), ))
        content = comment.subject
        channel = comment.channel
        is_discuss = channel.is_discuss()
        channel.add_comment(comment)
        comment.reindex()
        if not is_discuss and content and content is not root:
            content.subscribe_to_channel(user)

        if appstruct.get('associated_contents', []):
            comment.set_associated_contents(
                appstruct['associated_contents'], author)

        if appstruct.get('alert', True):
            content_author = getattr(content, 'author', None)
            authors = getattr(content, 'authors', [content_author] if content_author else [])
            comment_author = getattr(context, 'author', None)

            if user in authors:
                authors.remove(user)

            if author in authors:
                authors.remove(author)

            if comment_author in authors:
                authors.remove(comment_author)

            comment_kind = 'general_discuss' if not channel.get_subject(author) \
                else 'discuss' if is_discuss else 'comment'
            author_data = get_user_data(author, 'author', request)
            alert_data = get_entity_data(comment, 'comment', request)
            alert_data.update(author_data)
            alert('internal', [root], authors,
                  internal_kind=InternalAlertKind.comment_alert,
                  subjects=[channel],
                  comment_kind=comment_kind,
                  **alert_data)
            subject_data = get_entity_data(content, 'subject', request)
            alert_data.update(subject_data)
            mail_id = 'alert_discuss' if is_discuss else 'alert_comment'
            for user_to_alert in [u for u in authors if getattr(u, 'email', '')]:
                mail_template = root.get_mail_template(
                    mail_id, user_to_alert.user_locale)
                subject = mail_template['subject'].format(
                    **subject_data)
                email_data = get_user_data(user_to_alert, 'recipient', request)
                email_data.update(alert_data)
                message = mail_template['template'].format(
                    novaideo_title=root.title,
                    **email_data
                )
                alert('email', [root.get_site_sender()], [user_to_alert.email],
                      subject=subject, body=message)

            if comment_author is not user and comment_author is not author:
                alert('internal', [root], [comment_author],
                      internal_kind=InternalAlertKind.comment_alert,
                      subjects=[channel], is_respons=True,
                      comment_kind=comment_kind,
                      **alert_data
                      )
                if getattr(comment_author, 'email', ''):
                    email_data = get_user_data(comment_author, 'recipient', request)
                    email_data.update(alert_data)
                    mail_template = root.get_mail_template(
                        'alert_discuss' if is_discuss else 'alert_respons',
                        comment_author.user_locale)
                    subject = mail_template['subject'].format(
                        **subject_data)
                    message = mail_template['template'].format(
                        novaideo_title=root.title,
                        **email_data
                    )
                    alert('email', [root.get_site_sender()], [comment_author.email],
                          subject=subject, body=message)

        user.set_read_date(channel, datetime.datetime.now(tz=pytz.UTC))
        return {'newcontext': comment.subject}
Beispiel #44
0
    def start(self, context, request, appstruct, **kw):
        root = getSite()
        anonymous = appstruct.get('anonymous', False)
        comment = appstruct['_object_data']
        context.addtoproperty('comments', comment)
        comment.format(request)
        user = appstruct.get('user', get_current())
        author = user if not anonymous else user.get_mask(root)
        comment.setproperty('author', author)
        comment.state = PersistentList(['published'])
        grant_roles(user=author, roles=(('Owner', comment), ))
        content = comment.subject
        channel = comment.channel
        is_discuss = channel.is_discuss()
        channel.add_comment(comment)
        comment.reindex()
        if not is_discuss and content and content is not root:
            content.subscribe_to_channel(user)

        if appstruct.get('associated_contents', []):
            comment.set_associated_contents(appstruct['associated_contents'],
                                            author)

        if appstruct.get('alert', True):
            content_author = getattr(content, 'author', None)
            authors = getattr(content, 'authors',
                              [content_author] if content_author else [])
            comment_author = getattr(context, 'author', None)

            if user in authors:
                authors.remove(user)

            if author in authors:
                authors.remove(author)

            if comment_author in authors:
                authors.remove(comment_author)

            comment_kind = 'general_discuss' if not channel.get_subject(author) \
                else 'discuss' if is_discuss else 'comment'
            author_data = get_user_data(author, 'author', request)
            alert_data = get_entity_data(comment, 'comment', request)
            alert_data.update(author_data)
            alert('internal', [root],
                  authors,
                  internal_kind=InternalAlertKind.comment_alert,
                  subjects=[channel],
                  comment_kind=comment_kind,
                  **alert_data)
            subject_data = get_entity_data(content, 'subject', request)
            alert_data.update(subject_data)
            mail_id = 'alert_discuss' if is_discuss else 'alert_comment'
            for user_to_alert in [
                    u for u in authors if getattr(u, 'email', '')
            ]:
                mail_template = root.get_mail_template(
                    mail_id, user_to_alert.user_locale)
                subject = mail_template['subject'].format(**subject_data)
                email_data = get_user_data(user_to_alert, 'recipient', request)
                email_data.update(alert_data)
                message = mail_template['template'].format(
                    novaideo_title=root.title, **email_data)
                alert('email', [root.get_site_sender()], [user_to_alert.email],
                      subject=subject,
                      body=message)

            if comment_author is not user and comment_author is not author:
                alert('internal', [root], [comment_author],
                      internal_kind=InternalAlertKind.comment_alert,
                      subjects=[channel],
                      is_respons=True,
                      comment_kind=comment_kind,
                      **alert_data)
                if getattr(comment_author, 'email', ''):
                    email_data = get_user_data(comment_author, 'recipient',
                                               request)
                    email_data.update(alert_data)
                    mail_template = root.get_mail_template(
                        'alert_discuss' if is_discuss else 'alert_respons',
                        comment_author.user_locale)
                    subject = mail_template['subject'].format(**subject_data)
                    message = mail_template['template'].format(
                        novaideo_title=root.title, **email_data)
                    alert('email', [root.get_site_sender()],
                          [comment_author.email],
                          subject=subject,
                          body=message)

        user.set_read_date(channel, datetime.datetime.now(tz=pytz.UTC))
        return {'newcontext': comment.subject}