From ebc992de79874c384c03d70d8cd0ac70e457a986 Mon Sep 17 00:00:00 2001 From: Luan fonseca de farias Date: Tue, 22 Nov 2016 19:05:30 -0300 Subject: [PATCH 1/2] #192 - Start the interfaces for Tracks --- deck/forms.py | 8 ++- deck/models.py | 3 + .../event/snippets/event_list_item.html | 3 + .../templates/track/track_confirm_delete.html | 28 ++++++++ deck/templates/track/track_form.html | 69 +++++++++++++++++++ deck/urls.py | 11 +++ deck/views.py | 68 +++++++++++++++++- 7 files changed, 187 insertions(+), 3 deletions(-) create mode 100644 deck/templates/track/track_confirm_delete.html create mode 100644 deck/templates/track/track_form.html diff --git a/deck/forms.py b/deck/forms.py index 9115087..51043f7 100644 --- a/deck/forms.py +++ b/deck/forms.py @@ -5,7 +5,7 @@ from datetimewidget.widgets import DateTimeWidget -from .models import Event, Proposal, Activity +from .models import Event, Proposal, Activity, Track class CustomDateTimeWidget(DateTimeWidget): @@ -98,3 +98,9 @@ class Meta: 'start_timetable': CustomTimeInputWidget(format='%H:%M'), 'end_timetable': CustomTimeInputWidget(format='%H:%M'), } + + +class TrackForm(forms.ModelForm): + class Meta: + model = Track + fields = ('title',) diff --git a/deck/models.py b/deck/models.py index d74528a..babb608 100644 --- a/deck/models.py +++ b/deck/models.py @@ -274,6 +274,9 @@ def proposals(self): pk__in=self.activities.values_list('pk', flat=True) ) + def get_absolute_url(self): + return reverse('view_event', kwargs={'slug': self.event.slug}) + class Event(DeckBaseModel): allow_public_voting = models.BooleanField(_('Allow Public Voting'), diff --git a/deck/templates/event/snippets/event_list_item.html b/deck/templates/event/snippets/event_list_item.html index c1f0201..eee828e 100644 --- a/deck/templates/event/snippets/event_list_item.html +++ b/deck/templates/event/snippets/event_list_item.html @@ -59,6 +59,9 @@

{{ event.title }}

{% trans "Create Schedule" %} + + {% trans "Create Tracks" %} + {% endif %} diff --git a/deck/templates/track/track_confirm_delete.html b/deck/templates/track/track_confirm_delete.html new file mode 100644 index 0000000..c71b358 --- /dev/null +++ b/deck/templates/track/track_confirm_delete.html @@ -0,0 +1,28 @@ +{% extends "layout.html" %} + +{% load i18n %} +{% load bootstrap3 %} + +{% block head_title %}{% trans "Delete Track" %}: "{{ object }}"{% endblock %} + +{% block content %} +
+

{% trans "Delete Track" %}: "{{ object }}"

+

{% trans "Are you sure you want to delete this track?" %}

+

{% trans "After deleting this track all activities will be lost forever." %}

+
+ {% buttons %} + + + {% endbuttons %} +
+
+{% endblock content %} \ No newline at end of file diff --git a/deck/templates/track/track_form.html b/deck/templates/track/track_form.html new file mode 100644 index 0000000..296e56c --- /dev/null +++ b/deck/templates/track/track_form.html @@ -0,0 +1,69 @@ +{% extends "layout.html" %} + +{% load i18n %} +{% load bootstrap3 %} + +{% block head_title %} + {% if form.instance.pk %} + {% trans "Update Track" %}: "{{ object }}" + {% else %} + {% trans "New Track" %} + {% endif %} +{% endblock %} + +{% block head %} + + +{% endblock head %} + +{% block content %} + + +
+

+ {% if form.instance.pk %} + {% trans "Update Track" %} "{{ object }}" + {% else %} + {% trans "New Track for" %} "{{ event }}" + {% endif %} +

+
+
+ +
+
+ {% csrf_token %} + + {% bootstrap_form form layout="inline" %} + + {% buttons %} + + + {% endbuttons %} +
+
+
+ +{% endblock content %} + +{% block scripts %} + + +{% endblock scripts %} diff --git a/deck/urls.py b/deck/urls.py index 0a1d427..51ab70a 100644 --- a/deck/urls.py +++ b/deck/urls.py @@ -56,4 +56,15 @@ r'proposals//disapprove_proposal/', view=views.DisapproveProposal.as_view(), name='disapprove_proposal'), + url(regex=r'/events//tracks/create/', + view=views.CreateTrack.as_view(), + name='create_event_track'), + url(regex=r'/events//' + r'tracks//update/', + view=views.UpdateTrack.as_view(), + name='update_track'), + url(regex=r'/events//' + r'tracks//delete/', + view=views.DeleteTrack.as_view(), + name='delete_track'), ) diff --git a/deck/views.py b/deck/views.py index 24b872f..09ed957 100644 --- a/deck/views.py +++ b/deck/views.py @@ -17,8 +17,11 @@ from vanilla import CreateView, DeleteView, DetailView, ListView, UpdateView from djqscsv import render_to_csv_response -from .models import Event, Proposal, Vote, Activity -from .forms import EventForm, ProposalForm, ActivityForm, ActivityTimetableForm +from .models import Event, Proposal, Vote, Activity, Track +from .forms import ( + EventForm, ProposalForm, ActivityForm, + ActivityTimetableForm, TrackForm +) from core.mixins import LoginRequiredMixin, FormValidRedirectMixing @@ -551,3 +554,64 @@ def dispatch(self, *args, **kwargs): content_type='application/json' ) return super(DisapproveProposal, self).dispatch(*args, **kwargs) + + +class BaseTrackView(object): + model = Track + form_class = TrackForm + lookup_field = 'slug' + + +class CreateTrack(LoginRequiredMixin, + BaseTrackView, + CreateView, + FormValidRedirectMixing): + template_name = 'track/track_form.html' + + def get_context_data(self, **kwargs): + context = super(CreateTrack, self).get_context_data(**kwargs) + context['event'] = Event.objects.get(slug=self.kwargs['slug']) + return context + + def form_valid(self, form): + self.object = form.save(commit=False) + self.object.author = self.request.user + self.object.event = Event.objects.get(slug=self.kwargs['slug']) + self.object.save() + return self.success_redirect(_(u'Track created.')) + + +class UpdateTrack(LoginRequiredMixin, + BaseTrackView, + UpdateView, + FormValidRedirectMixing): + template_name = 'track/track_form.html' + + def get_context_data(self, **kwargs): + context = super(UpdateTrack, self).get_context_data(**kwargs) + context['event'] = Event.objects.get(slug=self.kwargs['event_slug']) + return context + + def form_valid(self, form): + self.object = form.save() + return self.success_redirect(_(u'Track updated.')) + + +class DeleteTrack(BaseTrackView, DeleteView): + template_name = 'track/track_confirm_delete.html' + + def post(self, request, *args, **kwargs): + track = self.get_object() + track.delete() + messages.success(self.request, _(u'Track deleted.')) + return HttpResponseRedirect(track.event.get_absolute_url()) + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + track = self.get_object() + if (track.event.author != self.request.user and + not self.request.user.is_superuser): + messages.error( + self.request, _(u'You are not allowed to see this page.')) + return HttpResponseRedirect(track.event.get_absolute_url()) + return super(DeleteProposal, self).dispatch(*args, **kwargs) From d2e7a3f132b4d4e60df9a0a9ea6d52999399cbb1 Mon Sep 17 00:00:00 2001 From: Luan fonseca de farias Date: Tue, 22 Nov 2016 19:22:04 -0300 Subject: [PATCH 2/2] Try to fix the ci deployment --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6127c47..bece4df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,9 @@ script: - coverage run manage.py test after_success: - coveralls - # - fab deploy env: global: - secure: JFAH2i22AtBYLTpgzecYdv4aDuR5SIDAqgmZ6Vc5hx9GrvXs2W//NeMXPG6rTJhQoFfFUrko3Zjnasefm+CX+hJ/ZtwsgMgZlydqcEsVsPZrT6MQY6a0XIkgOKBsuZAbzztC/B8hiTnIiCSM00BKywprT/rM56u3AEGh4oJhMR0= +before_install: + - openssl aes-256-cbc -K $encrypted_12f6bf8c95e8_key -iv $encrypted_12f6bf8c95e8_iv + -in deploy-key.enc -out deploy-key -d