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)
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)
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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)
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 {}
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)
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 )
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 {}
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 {}
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')
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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 {}
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}
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 {}
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 {}
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}
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)
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 {}