From 6737515ad4bcc985b3dd35d9c706b0d24937afc9 Mon Sep 17 00:00:00 2001 From: Jesper Hess Nielsen Date: Fri, 13 Jul 2018 14:36:20 +0200 Subject: [PATCH 01/39] Add Saxo Bank logo --- src/static_src/img/sponsors/saxobank.png | Bin 0 -> 21016 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/static_src/img/sponsors/saxobank.png diff --git a/src/static_src/img/sponsors/saxobank.png b/src/static_src/img/sponsors/saxobank.png new file mode 100644 index 0000000000000000000000000000000000000000..756a9b02dd7ba20003e576afa2009e38ae8c1439 GIT binary patch literal 21016 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 Date: Fri, 13 Jul 2018 14:38:01 +0200 Subject: [PATCH 02/39] fix coinify callbacks by passing request argument to order.mark_as_paid() --- src/shop/coinify.py | 4 ++-- src/shop/views.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/shop/coinify.py b/src/shop/coinify.py index 3b984c5a..d083b0e3 100644 --- a/src/shop/coinify.py +++ b/src/shop/coinify.py @@ -8,7 +8,7 @@ import requests logger = logging.getLogger("bornhack.%s" % __name__) -def process_coinify_invoice_json(invoicejson, order): +def process_coinify_invoice_json(invoicejson, order, request): # create or update the invoice object in our database coinifyinvoice, created = CoinifyAPIInvoice.objects.update_or_create( coinify_id=invoicejson['id'], @@ -20,7 +20,7 @@ def process_coinify_invoice_json(invoicejson, order): # if the order is paid in full call the mark as paid method now if invoicejson['state'] == 'complete' and not coinifyinvoice.order.paid: - coinifyinvoice.order.mark_as_paid() + coinifyinvoice.order.mark_as_paid(request=request) return coinifyinvoice diff --git a/src/shop/views.py b/src/shop/views.py index 025f62f3..0ddfa13a 100644 --- a/src/shop/views.py +++ b/src/shop/views.py @@ -562,8 +562,9 @@ class CoinifyCallbackView(SingleObjectMixin, View): if callbackobject.payload['event'] == 'invoice_state_change' or callbackobject.payload['event'] == 'invoice_manual_resend': process_coinify_invoice_json( - callbackobject.payload['data'], - self.get_object() + invoicejson=callbackobject.payload['data'], + order=self.get_object(), + request=request, ) return HttpResponse('OK') else: From 8ac973bc6117bcfec01d1b864643c395158f0727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=AD=C3=B0ir=20Valberg=20Gu=C3=B0mundsson?= Date: Mon, 16 Jul 2018 16:07:38 +0200 Subject: [PATCH 03/39] Iterate over camo_filter and return the first one that returns results! (#243) --- src/camps/mixins.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/camps/mixins.py b/src/camps/mixins.py index 46a61144..e16dd840 100644 --- a/src/camps/mixins.py +++ b/src/camps/mixins.py @@ -17,8 +17,16 @@ class CampViewMixin(object): def get_queryset(self): queryset = super(CampViewMixin, self).get_queryset() if queryset: - camp_filter = {self.model.get_camp_filter(): self.camp} - return queryset.filter(**camp_filter) + camp_filter = self.model.get_camp_filter() + + # Let us deal with eveything as a list + if isinstance(camp_filter, str): + camp_filter = [camp_filter] + + for _filter in camp_filter: + result = queryset.filter(**{_filter: self.camp}) + if result.exists(): + return result # Camp relation not found, or queryset is empty, return it unaltered return queryset From b602e394feea3f9d85599b95645a4e14138e6df6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=AD=C3=B0ir=20Valberg=20Gu=C3=B0mundsson?= Date: Tue, 17 Jul 2018 20:46:30 +0200 Subject: [PATCH 04/39] Fix CampViewMixin to deal properly with multiple camp_filters when dealing with SingleObjectMixin based CBVs --- src/camps/mixins.py | 6 +++++- src/program/models.py | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/camps/mixins.py b/src/camps/mixins.py index e16dd840..2a4ad5bb 100644 --- a/src/camps/mixins.py +++ b/src/camps/mixins.py @@ -24,7 +24,11 @@ class CampViewMixin(object): camp_filter = [camp_filter] for _filter in camp_filter: - result = queryset.filter(**{_filter: self.camp}) + filter_dict = {_filter: self.camp} + if hasattr(self, 'pk_url_kwarg'): + # We should also filter for the pk of the object + filter_dict['pk'] = str(self.kwargs.get(self.pk_url_kwarg)) + result = queryset.filter(**filter_dict) if result.exists(): return result diff --git a/src/program/models.py b/src/program/models.py index 22a58381..e7464b7d 100644 --- a/src/program/models.py +++ b/src/program/models.py @@ -146,7 +146,12 @@ class Url(CampRelatedModel): def camp(self): return self.owner.camp - camp_filter = 'owner__camp' + camp_filter = [ + 'speakerproposal__camp', + 'eventproposal__track__camp', + 'speaker__camp', + 'event__track__camp', + ] ############################################################################### From 32e9b7c40b6bef6b1550ea2e76e2ad176e49c66d Mon Sep 17 00:00:00 2001 From: Thomas Steen Rasmussen Date: Tue, 17 Jul 2018 22:43:16 +0200 Subject: [PATCH 05/39] Fix urls handling and other stuff (#249) * update font-awesome to 5.1 and add fab- and fa-regular icons, fixed #244 * also handle slugs when dealing with SingleObjectMixin CBV views, fixes #248 * add missing trailing slash to bar/menu * add missing trailing slash on event slugs, fixes #245 * fix a lot of stuff related to proposal URLs. actually display them on speaker and event detail pages. show the urltype icons. better messages on update and delete pages. fix 500 error when reapproving events. fix bug that made urls multiply when reapproving event. fixes #246 and fixes #247 --- src/bornhack/urls.py | 2 +- src/camps/mixins.py | 19 +- .../migrations/0062_auto_20180717_1720.py | 18 + src/program/models.py | 13 +- .../includes/event_proposal_table.html | 2 +- .../includes/eventproposalurl_table.html | 8 +- .../includes/speaker_proposal_table.html | 4 +- .../templates/schedule_event_detail.html | 11 + src/program/templates/speaker_detail.html | 11 + src/program/templates/url_delete.html | 6 +- src/program/urls.py | 2 +- src/program/views.py | 35 +- src/static_src/webfonts/fa-brands-400.eot | Bin 0 -> 115052 bytes src/static_src/webfonts/fa-brands-400.svg | 1127 +++++++++++++++++ src/static_src/webfonts/fa-brands-400.ttf | Bin 0 -> 114816 bytes src/static_src/webfonts/fa-brands-400.woff | Bin 0 -> 73920 bytes src/static_src/webfonts/fa-brands-400.woff2 | Bin 0 -> 63376 bytes src/static_src/webfonts/fa-regular-400.eot | Bin 0 -> 40744 bytes src/static_src/webfonts/fa-regular-400.svg | 467 +++++++ src/static_src/webfonts/fa-regular-400.ttf | Bin 0 -> 40516 bytes src/static_src/webfonts/fa-regular-400.woff | Bin 0 -> 18212 bytes src/static_src/webfonts/fa-regular-400.woff2 | Bin 0 -> 14952 bytes src/static_src/webfonts/fa-solid-900.eot | Bin 133140 -> 160768 bytes src/static_src/webfonts/fa-solid-900.svg | 381 +++++- src/static_src/webfonts/fa-solid-900.ttf | Bin 132920 -> 160548 bytes src/static_src/webfonts/fa-solid-900.woff | Bin 63836 -> 76632 bytes src/static_src/webfonts/fa-solid-900.woff2 | Bin 50372 -> 59572 bytes 27 files changed, 2061 insertions(+), 45 deletions(-) create mode 100644 src/program/migrations/0062_auto_20180717_1720.py create mode 100644 src/static_src/webfonts/fa-brands-400.eot create mode 100644 src/static_src/webfonts/fa-brands-400.svg create mode 100644 src/static_src/webfonts/fa-brands-400.ttf create mode 100644 src/static_src/webfonts/fa-brands-400.woff create mode 100644 src/static_src/webfonts/fa-brands-400.woff2 create mode 100644 src/static_src/webfonts/fa-regular-400.eot create mode 100644 src/static_src/webfonts/fa-regular-400.svg create mode 100644 src/static_src/webfonts/fa-regular-400.ttf create mode 100644 src/static_src/webfonts/fa-regular-400.woff create mode 100644 src/static_src/webfonts/fa-regular-400.woff2 diff --git a/src/bornhack/urls.py b/src/bornhack/urls.py index 6c8f2ec9..cda0e36c 100644 --- a/src/bornhack/urls.py +++ b/src/bornhack/urls.py @@ -141,7 +141,7 @@ urlpatterns = [ ), path( - 'bar/menu', + 'bar/menu/', MenuView.as_view(), name='menu' ), diff --git a/src/camps/mixins.py b/src/camps/mixins.py index 2a4ad5bb..b3ec86be 100644 --- a/src/camps/mixins.py +++ b/src/camps/mixins.py @@ -15,7 +15,7 @@ class CampViewMixin(object): return super().dispatch(request, *args, **kwargs) def get_queryset(self): - queryset = super(CampViewMixin, self).get_queryset() + queryset = super().get_queryset() if queryset: camp_filter = self.model.get_camp_filter() @@ -24,13 +24,26 @@ class CampViewMixin(object): camp_filter = [camp_filter] for _filter in camp_filter: + # add camp to the filter_dict filter_dict = {_filter: self.camp} - if hasattr(self, 'pk_url_kwarg'): + + # get pk from kwargs if we have it + pk = self.kwargs.get(self.pk_url_kwarg) + if pk is not None: # We should also filter for the pk of the object - filter_dict['pk'] = str(self.kwargs.get(self.pk_url_kwarg)) + filter_dict['pk'] = pk + + # get slug from kwargs if we have it + slug = self.kwargs.get(self.slug_url_kwarg) + if slug is not None and (pk is None or self.query_pk_and_slug): + # we should also filter for the slug of the object + filter_dict[self.get_slug_field()] = slug + + # do the filtering and return the result result = queryset.filter(**filter_dict) if result.exists(): return result # Camp relation not found, or queryset is empty, return it unaltered return queryset + diff --git a/src/program/migrations/0062_auto_20180717_1720.py b/src/program/migrations/0062_auto_20180717_1720.py new file mode 100644 index 00000000..1f369760 --- /dev/null +++ b/src/program/migrations/0062_auto_20180717_1720.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.4 on 2018-07-17 15:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('program', '0061_auto_20180603_1525'), + ] + + operations = [ + migrations.AlterField( + model_name='urltype', + name='icon', + field=models.CharField(default='fas fa-link', help_text="Name of the fontawesome icon to use, including the 'fab fa-' or 'fas fa-' part.", max_length=100), + ), + ] diff --git a/src/program/models.py b/src/program/models.py index e7464b7d..ce878415 100644 --- a/src/program/models.py +++ b/src/program/models.py @@ -37,7 +37,7 @@ class UrlType(CreatedUpdatedModel): icon = models.CharField( max_length=100, default='fas fa-link', - help_text="Name of the fontawesome icon to use without the 'fa-' part" + help_text="Name of the fontawesome icon to use, including the 'fab fa-' or 'fas fa-' part." ) class Meta: @@ -375,7 +375,11 @@ class EventProposal(UserSubmittedModel): def mark_as_approved(self, request): eventmodel = apps.get_model('program', 'event') eventproposalmodel = apps.get_model('program', 'eventproposal') - event = eventmodel() + # use existing event if we have one + if self.event: + event = self.event + else: + event = eventmodel() event.track = self.track event.title = self.title event.abstract = self.abstract @@ -394,7 +398,8 @@ class EventProposal(UserSubmittedModel): self.proposal_status = eventproposalmodel.PROPOSAL_APPROVED self.save() - # copy all the URLs too + # clear any old urls from the event object and copy all the URLs from the proposal + event.urls.clear() for url in self.urls.all(): Url.objects.create( url=url.url, @@ -402,7 +407,7 @@ class EventProposal(UserSubmittedModel): event=event ) - messages.success(request, "Event object %s has been created" % event) + messages.success(request, "Event object %s has been created/updated" % event) def mark_as_rejected(self, request): eventproposalmodel = apps.get_model('program', 'eventproposal') diff --git a/src/program/templates/includes/event_proposal_table.html b/src/program/templates/includes/event_proposal_table.html index b7ae87b4..cdbdb8ba 100644 --- a/src/program/templates/includes/event_proposal_table.html +++ b/src/program/templates/includes/event_proposal_table.html @@ -17,7 +17,7 @@ {{ eventproposal.title }} {{ eventproposal.event_type }} - {% for url in eventproposal.urls.all %} {% empty %}N/A{% endfor %} + {% for url in eventproposal.urls.all %} {% empty %}N/A{% endfor %} {% for person in eventproposal.speakers.all %} {% if request.resolver_match.app_name == "program" %} diff --git a/src/program/templates/includes/eventproposalurl_table.html b/src/program/templates/includes/eventproposalurl_table.html index 8a1575e5..0208a8ad 100644 --- a/src/program/templates/includes/eventproposalurl_table.html +++ b/src/program/templates/includes/eventproposalurl_table.html @@ -2,14 +2,16 @@ Type - URLs - Available Actions + URL + {% if not camp.read_only and request.resolver_match.app_name == "program" and eventproposal.user == request.user %} + Available Actions + {% endif %} {% for url in eventproposal.urls.all %} - {{ url.urltype.name }} + {{ url.urltype.name }} {{ url }} {% if not camp.read_only and request.resolver_match.app_name == "program" and eventproposal.user == request.user %} diff --git a/src/program/templates/includes/speaker_proposal_table.html b/src/program/templates/includes/speaker_proposal_table.html index f31a4a77..4c6cbbb4 100644 --- a/src/program/templates/includes/speaker_proposal_table.html +++ b/src/program/templates/includes/speaker_proposal_table.html @@ -25,9 +25,9 @@ {% for url in speakerproposal.urls.all %} - + {% empty %} - N/A + N/A {% endfor %} {{ speakerproposal.proposal_status }} diff --git a/src/program/templates/schedule_event_detail.html b/src/program/templates/schedule_event_detail.html index 11f05a80..1a82df0d 100644 --- a/src/program/templates/schedule_event_detail.html +++ b/src/program/templates/schedule_event_detail.html @@ -22,6 +22,17 @@
+

URLs for {{ event.title }}

+ {% if speaker.urls.exists %} + {% for url in speaker.urls.all %} +

{{ url.urltype }}: {{ url.url }}

+ {% endfor %} + {% else %} +

No URLs found.

+ {% endif %} + +
+

Instances