Skip to content

Commit

Permalink
feat: add field for email exception in speaker schema
Browse files Browse the repository at this point in the history
mute notifications and mails for overriden speakers

adds checks

fixes travis

removes redundant None in data.get

update permission to organizer access

update email logic
  • Loading branch information
shreyanshdwivedi committed Jul 19, 2019
1 parent 7d6399d commit e11fbac
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 4 deletions.
5 changes: 3 additions & 2 deletions app/api/helpers/scheduled_jobs.py
Expand Up @@ -46,8 +46,9 @@ def send_after_event_mail():
(time_difference.seconds / 60)
if current_time > event.ends_at and time_difference_minutes < 1440:
for speaker in speakers:
send_email_after_event(speaker.user.email, event.name, upcoming_event_links)
send_notif_after_event(speaker.user, event.name)
if not speaker.is_email_overridden:
send_email_after_event(speaker.user.email, event.name, upcoming_event_links)
send_notif_after_event(speaker.user, event.name)
for organizer in organizers:
send_email_after_event(organizer.user.email, event.name, upcoming_event_links)
send_notif_after_event(organizer.user, event.name)
Expand Down
1 change: 1 addition & 0 deletions app/api/schema/speakers.py
Expand Up @@ -39,6 +39,7 @@ class Meta:
linkedin = fields.Url(allow_none=True)
organisation = fields.Str(allow_none=True)
is_featured = fields.Boolean(default=False)
is_email_overridden = fields.Boolean(default=False)
position = fields.Str(allow_none=True)
country = fields.Str(allow_none=True)
city = fields.Str(allow_none=True)
Expand Down
5 changes: 3 additions & 2 deletions app/api/sessions.py
Expand Up @@ -161,8 +161,9 @@ def after_update_object(self, session, data, view_kwargs):
frontend_url = get_settings()['frontend_url']
link = "{}/events/{}/sessions/{}" \
.format(frontend_url, event.identifier, session.id)
send_email_session_accept_reject(speaker.email, session, link)
send_notif_session_accept_reject(speaker, session.title, session.state, link, session.id)
if not speaker.is_email_overridden:
send_email_session_accept_reject(speaker.email, session, link)
send_notif_session_accept_reject(speaker, session.title, session.state, link, session.id)

# Email for owner
if session.event.get_owner():
Expand Down
15 changes: 15 additions & 0 deletions app/api/speakers.py
@@ -1,4 +1,5 @@
from flask import request
from flask_login import current_user
from flask_rest_jsonapi import ResourceDetail, ResourceList, ResourceRelationship
from flask_rest_jsonapi.exceptions import ObjectNotFound

Expand Down Expand Up @@ -45,6 +46,13 @@ def before_post(self, args, kwargs, data=None):
deleted_at=None)) > 0:
raise ForbiddenException({'pointer': ''}, 'Speaker with this Email ID already exists')

if data.get('is_email_overriden') and not has_access('is_organizer', event_id=data['event']):
raise ForbiddenException({'pointer': 'data/attributes/is_email_overriden'},
'Organizer access required to override email')
elif data.get('is_email_overriden') and has_access('is_organizer', event_id=data['event']) and \
not data.get('email'):
data['email'] = current_user.email

if 'sessions' in data:
session_ids = data['sessions']
for session_id in session_ids:
Expand Down Expand Up @@ -126,6 +134,13 @@ def before_update_object(self, speaker, data, view_kwargs):
if data.get('photo_url') and data['photo_url'] != speaker.photo_url:
start_image_resizing_tasks(speaker, data['photo_url'])

if data.get('is_email_overriden') and not has_access('is_organizer', event_id=speaker.event_id):
raise ForbiddenException({'pointer': 'data/attributes/is_email_overriden'},
'Organizer access required to override email')
elif data.get('is_email_overriden') and has_access('is_organizer', event_id=speaker.event_id) and \
not data.get('email'):
data['email'] = current_user.email

def after_patch(self, result):
"""
method to create session speaker link
Expand Down
3 changes: 3 additions & 0 deletions app/models/speaker.py
Expand Up @@ -24,6 +24,7 @@ class Speaker(SoftDeletionModel):
linkedin = db.Column(db.String)
organisation = db.Column(db.String)
is_featured = db.Column(db.Boolean, default=False)
is_email_overridden = db.Column(db.Boolean, default=False)
position = db.Column(db.String)
country = db.Column(db.String)
city = db.Column(db.String)
Expand Down Expand Up @@ -51,6 +52,7 @@ def __init__(self,
linkedin=None,
organisation=None,
is_featured=False,
is_email_overridden=False,
position=None,
country=None,
city=None,
Expand All @@ -76,6 +78,7 @@ def __init__(self,
self.github = github
self.linkedin = linkedin
self.is_featured = is_featured
self.is_email_overridden = is_email_overridden
self.organisation = organisation
self.position = position
self.country = country
Expand Down
28 changes: 28 additions & 0 deletions migrations/versions/96bca587b3ca_.py
@@ -0,0 +1,28 @@
"""add column is_email_overriden to speaker table
Revision ID: 96bca587b3ca
Revises: facee76912bc
Create Date: 2019-07-18 04:50:05.175917
"""

from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils


# revision identifiers, used by Alembic.
revision = '96bca587b3ca'
down_revision = 'facee76912bc'


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('speaker', sa.Column('is_email_overridden', sa.Boolean(), server_default='False', nullable=False))
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('speaker', 'is_email_overridden')
# ### end Alembic commands ###

0 comments on commit e11fbac

Please sign in to comment.