diff options
Diffstat (limited to 'postgresqleu/confreg/backendviews.py')
| -rw-r--r-- | postgresqleu/confreg/backendviews.py | 77 |
1 files changed, 76 insertions, 1 deletions
diff --git a/postgresqleu/confreg/backendviews.py b/postgresqleu/confreg/backendviews.py index ed1141a2..24c13c67 100644 --- a/postgresqleu/confreg/backendviews.py +++ b/postgresqleu/confreg/backendviews.py @@ -27,6 +27,7 @@ from .models import BulkPayment from .models import AccessToken from .models import ShirtSize from .models import PendingAdditionalOrder +from .models import ConferenceTweetQueue from postgresqleu.invoices.models import Invoice from postgresqleu.confsponsor.util import get_sponsor_dashboard_data @@ -42,10 +43,13 @@ from .backendforms import BackendAccessTokenForm from .backendforms import BackendConferenceSeriesForm from .backendforms import BackendTshirtSizeForm from .backendforms import BackendNewsForm -from .backendforms import TwitterForm, TwitterTestForm +from .backendforms import TwitterForm, TwitterTestForm, BackendTweetQueueForm +from .backendforms import TweetCampaignSelectForm from .backendforms import BackendSendEmailForm from .backendforms import BackendRefundPatternForm +from .campaigns import get_campaign_from_id + ####################### # Simple editing views @@ -243,6 +247,18 @@ def edit_news(request, urlname, rest): rest) +def edit_tweetqueue(request, urlname, rest): + conference = get_authenticated_conference(request, urlname) + + return backend_list_editor(request, + urlname, + BackendTweetQueueForm, + rest, + return_url='../../', + instancemaker=lambda: ConferenceTweetQueue(conference=conference, author=request.user) + ) + + ### # Non-simple-editor views ### @@ -354,10 +370,18 @@ def twitter_integration(request, urlname): conference.twitter_token = tokens.get('oauth_token') conference.twitter_secret = tokens.get('oauth_token_secret') conference.twittersync_active = False + tw = Twitter(conference) + try: + conference.twitter_user = tw.get_own_screen_name() + except Exception as e: + messages.error(request, 'Failed to verify account credentials and get username: {}'.format(e)) + return HttpResponseRedirect('.') + conference.save() messages.info(request, 'Twitter integration enabled') return HttpResponseRedirect('.') elif request.POST.get('deactivate_twitter', '') == '1': + conference.twitter_user = '' conference.twitter_token = '' conference.twitter_secret = '' conference.twittersync_active = False @@ -397,6 +421,57 @@ def twitter_integration(request, urlname): }) +def tweetcampaignselect(request, urlname): + conference = get_authenticated_conference(request, urlname) + + if request.method == 'POST': + form = TweetCampaignSelectForm(data=request.POST) + if form.is_valid(): + return HttpResponseRedirect("{}/".format(form.cleaned_data['campaigntype'])) + else: + form = TweetCampaignSelectForm() + + return render(request, 'confreg/admin_backend_form.html', { + 'conference': conference, + 'basetemplate': 'confreg/confadmin_base.html', + 'form': form, + 'whatverb': 'Create campaign', + 'savebutton': 'Select campaign type', + 'cancelurl': '../../', + 'helplink': 'integrations#campaigns', + }) + + +def tweetcampaign(request, urlname, typeid): + conference = get_authenticated_conference(request, urlname) + + campaign = get_campaign_from_id(typeid) + + if request.method == 'GET' and 'fieldpreview' in request.GET: + return campaign.get_dynamic_preview(conference, request.GET['fieldpreview'], request.GET['previewval']) + + if request.method == 'POST': + form = campaign.form(conference, request.POST) + if form.is_valid(): + with transaction.atomic(): + form.generate_tweets(request.user) + messages.info(request, "Campaign tweets generated") + return HttpResponseRedirect("../../queue/") + else: + form = campaign.form(conference) + + return render(request, 'confreg/admin_backend_form.html', { + 'conference': conference, + 'basetemplate': 'confreg/confadmin_base.html', + 'form': form, + 'whatverb': 'Create campaign', + 'savebutton': "Create campaign", + 'cancelurl': '../../../', + 'note': campaign.note, + 'helplink': 'integrations#campaigns', + }) + + class DelimitedWriter(object): def __init__(self, delimiter): self.delimiter = delimiter |
