Пример #1
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)
Пример #2
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)
Пример #3
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 {}
Пример #4
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 {}
Пример #5
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 {}
Пример #6
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 {}
Пример #7
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 {}
Пример #8
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 {}
Пример #9
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 {}
Пример #10
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
Пример #11
0
    def start(self, context, request, appstruct, **kw):
        email = appstruct.pop('email')
        newnewsletters = appstruct.pop('newsletters')
        first_name = appstruct.get('first_name')
        last_name = appstruct.get('last_name')
        random_key = gen_random_token()
        root = getSite()
        mail_template = root.get_mail_template('newsletter_subscription')
        for newsletter in newnewsletters:
            newsletter.subscribe(first_name, last_name, email, random_key)
            url = request.resource_url(
                context, '@@userunsubscribenewsletter',
                query={'oid': get_oid(newsletter),
                       'user': email+'@@'+random_key})
            email_data = get_entity_data(
                newsletter, 'newsletter', request)
            subject = mail_template['subject'].format(
                newsletter_title=newsletter.title,
                novaideo_title=root.title)
            mail = mail_template['template'].format(
                first_name=first_name,
                last_name=last_name,
                unsubscribeurl=url,
                novaideo_title=root.title,
                **email_data)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject, body=mail)

        return {}
Пример #12
0
    def start(self, context, request, appstruct, **kw):
        newsletter = appstruct.pop('newsletter')
        user = appstruct.pop('user', None)
        if user and getattr(newsletter, 'allow_unsubscribing', True):
            parts = user.split('@@')
            key = parts[0]
            user_id = parts[1]
            subscribed = newsletter.subscribed.get(key, None)
            if subscribed and user_id == subscribed.get('id', None):
                newsletter.subscribed.pop(key)
                first_name = subscribed.get('first_name')
                last_name = subscribed.get('last_name')
                email = subscribed.get('email')
                root = getSite()
                mail_template = root.get_mail_template(
                    'newsletter_unsubscription')
                email_data = get_entity_data(
                    newsletter, 'newsletter', request)
                subject = mail_template['subject'].format(
                    newsletter_title=newsletter.title,
                    novaideo_title=root.title)
                mail = mail_template['template'].format(
                    first_name=first_name,
                    last_name=last_name,
                    novaideo_title=root.title,
                    **email_data)
                alert('email', [root.get_site_sender()], [email],
                      subject=subject, body=mail)

        return {}
Пример #13
0
    def start(self, context, request, appstruct, **kw):
        email = appstruct.pop('email')
        newnewsletters = appstruct.pop('newsletters')
        first_name = appstruct.get('first_name')
        last_name = appstruct.get('last_name')
        random_key = gen_random_token()
        root = getSite()
        mail_template = root.get_mail_template('newsletter_subscription')
        for newsletter in newnewsletters:
            newsletter.subscribe(first_name, last_name, email, random_key)
            url = request.resource_url(context,
                                       '@@userunsubscribenewsletter',
                                       query={
                                           'oid': get_oid(newsletter),
                                           'user': email + '@@' + random_key
                                       })
            email_data = get_entity_data(newsletter, 'newsletter', request)
            subject = mail_template['subject'].format(
                newsletter_title=newsletter.title, novaideo_title=root.title)
            mail = mail_template['template'].format(first_name=first_name,
                                                    last_name=last_name,
                                                    unsubscribeurl=url,
                                                    novaideo_title=root.title,
                                                    **email_data)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject,
                  body=mail)

        return {}
Пример #14
0
    def start(self, context, request, appstruct, **kw):
        newsletter = appstruct.pop('newsletter')
        user = appstruct.pop('user', None)
        if user and getattr(newsletter, 'allow_unsubscribing', True):
            parts = user.split('@@')
            key = parts[0]
            user_id = parts[1]
            subscribed = newsletter.subscribed.get(key, None)
            if subscribed and user_id == subscribed.get('id', None):
                newsletter.subscribed.pop(key)
                first_name = subscribed.get('first_name')
                last_name = subscribed.get('last_name')
                email = subscribed.get('email')
                root = getSite()
                mail_template = root.get_mail_template(
                    'newsletter_unsubscription')
                email_data = get_entity_data(newsletter, 'newsletter', request)
                subject = mail_template['subject'].format(
                    newsletter_title=newsletter.title,
                    novaideo_title=root.title)
                mail = mail_template['template'].format(
                    first_name=first_name,
                    last_name=last_name,
                    novaideo_title=root.title,
                    **email_data)
                alert('email', [root.get_site_sender()], [email],
                      subject=subject,
                      body=mail)

        return {}
Пример #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 {}
Пример #16
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 {}
Пример #17
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 {}
Пример #18
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)
Пример #19
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 {}
Пример #20
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)
Пример #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
    )
Пример #22
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 {}
Пример #23
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 {}
Пример #24
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')
Пример #25
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 {}
Пример #26
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 {}
Пример #27
0
    def start(self, context, request, appstruct, **kw):
        email = appstruct.pop('email')
        key = email
        subscribed = context.subscribed.get(key, None)
        if subscribed:
            context.subscribed.pop(key)
            first_name = subscribed.get('first_name')
            last_name = subscribed.get('last_name')
            email = subscribed.get('email')
            root = getSite()
            mail_template = root.get_mail_template('newsletter_unsubscription')
            email_data = get_entity_data(context, 'newsletter', request)
            subject = mail_template['subject'].format(
                newsletter_title=context.title, novaideo_title=root.title)
            mail = mail_template['template'].format(first_name=first_name,
                                                    last_name=last_name,
                                                    novaideo_title=root.title,
                                                    **email_data)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject,
                  body=mail)

        return {}
Пример #28
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 {}
Пример #29
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 {}
Пример #30
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 {}
Пример #31
0
    def start(self, context, request, appstruct, **kw):
        email = appstruct.pop('email')
        key = email
        subscribed = context.subscribed.get(key, None)
        if subscribed:
            context.subscribed.pop(key)
            first_name = subscribed.get('first_name')
            last_name = subscribed.get('last_name')
            email = subscribed.get('email')
            root = getSite()
            mail_template = root.get_mail_template('newsletter_unsubscription')
            email_data = get_entity_data(context, 'newsletter', request)
            subject = mail_template['subject'].format(
                newsletter_title=context.title,
                novaideo_title=root.title)
            mail = mail_template['template'].format(
                first_name=first_name,
                last_name=last_name,
                novaideo_title=root.title,
                **email_data)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject, body=mail)

        return {}
Пример #32
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}
Пример #33
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 {}
Пример #34
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 {}
Пример #35
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}
Пример #36
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)
Пример #37
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 {}