From 65b21e2291997e97e51412fb9cd9d5968a158b0f Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 3 Jan 2017 16:59:31 +0100 Subject: [PATCH] Add login for blocks, add project block template with login option --- .../0021_eventblock_login_required.py | 20 ++++++ app/organization/core/models.py | 1 + app/organization/core/views.py | 2 +- app/organization/media/views.py | 2 + .../migrations/0077_auto_20170103_1220.py | 25 ++++++++ .../0017_pageblock_login_required.py | 20 ++++++ .../0035_projectblock_login_required.py | 20 ++++++ .../migrations/0036_auto_20170103_1227.py | 46 ++++++++++++++ app/organization/projects/models.py | 1 - app/organization/projects/translation.py | 2 +- app/organization/projects/views.py | 61 ++++++++----------- app/templates/accounts/account_login.html | 1 - app/templates/core/inc/block.html | 2 +- app/templates/projects/inc/project_block.html | 45 ++++++++++++++ app/templates/projects/project_detail.html | 2 +- 15 files changed, 210 insertions(+), 40 deletions(-) create mode 100644 app/organization/agenda/migrations/0021_eventblock_login_required.py create mode 100644 app/organization/network/migrations/0077_auto_20170103_1220.py create mode 100644 app/organization/pages/migrations/0017_pageblock_login_required.py create mode 100644 app/organization/projects/migrations/0035_projectblock_login_required.py create mode 100644 app/organization/projects/migrations/0036_auto_20170103_1227.py create mode 100644 app/templates/projects/inc/project_block.html diff --git a/app/organization/agenda/migrations/0021_eventblock_login_required.py b/app/organization/agenda/migrations/0021_eventblock_login_required.py new file mode 100644 index 00000000..b74c3cac --- /dev/null +++ b/app/organization/agenda/migrations/0021_eventblock_login_required.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-01-03 11:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-agenda', '0020_auto_20161205_1536'), + ] + + operations = [ + migrations.AddField( + model_name='eventblock', + name='login_required', + field=models.BooleanField(default=False, verbose_name='login required'), + ), + ] diff --git a/app/organization/core/models.py b/app/organization/core/models.py index 50c1343e..529849d6 100644 --- a/app/organization/core/models.py +++ b/app/organization/core/models.py @@ -100,6 +100,7 @@ class Block(RichText, Titled, Orderable): with_separator = models.BooleanField(default=False) background_color = models.CharField(_('background color'), max_length=32, choices=COLOR_CHOICES, blank=True) + login_required = models.BooleanField(_('login required'), default=False) class Meta: abstract = True diff --git a/app/organization/core/views.py b/app/organization/core/views.py index 954d9123..bb386a77 100644 --- a/app/organization/core/views.py +++ b/app/organization/core/views.py @@ -22,7 +22,7 @@ from django.shortcuts import render, get_object_or_404 from django.http import Http404 from django.views.generic.base import View -from django.views.generic import DetailView, ListView, TemplateView +from django.views.generic import DetailView, ListView, TemplateView, UpdateView from django.apps import apps from django.utils import six, timezone, formats from django.utils.translation import ugettext_lazy as _ diff --git a/app/organization/media/views.py b/app/organization/media/views.py index 851549e7..d5c16d4a 100644 --- a/app/organization/media/views.py +++ b/app/organization/media/views.py @@ -73,6 +73,7 @@ class PlaylistListView(ListView): model = Playlist template_name='media/playlist_list.html' context_object_name = 'playlists' + def get_queryset(self): self.qs = Playlist.objects.all() self.current_type = None @@ -80,6 +81,7 @@ class PlaylistListView(ListView): self.qs = self.qs.filter(type=self.kwargs['type']) self.current_type = self.kwargs['type'] return self.qs + def get_context_data(self, **kwargs): context = super(PlaylistListView, self).get_context_data(**kwargs) diff --git a/app/organization/network/migrations/0077_auto_20170103_1220.py b/app/organization/network/migrations/0077_auto_20170103_1220.py new file mode 100644 index 00000000..58fdf797 --- /dev/null +++ b/app/organization/network/migrations/0077_auto_20170103_1220.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-01-03 11:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-network', '0076_auto_20161230_1839'), + ] + + operations = [ + migrations.AddField( + model_name='organizationblock', + name='login_required', + field=models.BooleanField(default=False, verbose_name='login required'), + ), + migrations.AddField( + model_name='personblock', + name='login_required', + field=models.BooleanField(default=False, verbose_name='login required'), + ), + ] diff --git a/app/organization/pages/migrations/0017_pageblock_login_required.py b/app/organization/pages/migrations/0017_pageblock_login_required.py new file mode 100644 index 00000000..5c2866d7 --- /dev/null +++ b/app/organization/pages/migrations/0017_pageblock_login_required.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-01-03 11:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-pages', '0016_auto_20161205_1536'), + ] + + operations = [ + migrations.AddField( + model_name='pageblock', + name='login_required', + field=models.BooleanField(default=False, verbose_name='login required'), + ), + ] diff --git a/app/organization/projects/migrations/0035_projectblock_login_required.py b/app/organization/projects/migrations/0035_projectblock_login_required.py new file mode 100644 index 00000000..12a37d78 --- /dev/null +++ b/app/organization/projects/migrations/0035_projectblock_login_required.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-01-03 11:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-projects', '0034_auto_20161230_1839'), + ] + + operations = [ + migrations.AddField( + model_name='projectblock', + name='login_required', + field=models.BooleanField(default=False, verbose_name='login required'), + ), + ] diff --git a/app/organization/projects/migrations/0036_auto_20170103_1227.py b/app/organization/projects/migrations/0036_auto_20170103_1227.py new file mode 100644 index 00000000..02072f68 --- /dev/null +++ b/app/organization/projects/migrations/0036_auto_20170103_1227.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-01-03 11:27 +from __future__ import unicode_literals + +from django.db import migrations, models +import mezzanine.core.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-projects', '0035_projectblock_login_required'), + ] + + operations = [ + migrations.AddField( + model_name='projectblock', + name='content_en', + field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'), + ), + migrations.AddField( + model_name='projectblock', + name='content_fr', + field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'), + ), + migrations.AddField( + model_name='projectblock', + name='description_en', + field=models.TextField(blank=True, null=True, verbose_name='description'), + ), + migrations.AddField( + model_name='projectblock', + name='description_fr', + field=models.TextField(blank=True, null=True, verbose_name='description'), + ), + migrations.AddField( + model_name='projectblock', + name='title_en', + field=models.CharField(max_length=1024, null=True, verbose_name='title'), + ), + migrations.AddField( + model_name='projectblock', + name='title_fr', + field=models.CharField(max_length=1024, null=True, verbose_name='title'), + ), + ] diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py index af207b34..d5c85d67 100644 --- a/app/organization/projects/models.py +++ b/app/organization/projects/models.py @@ -149,7 +149,6 @@ class ProjectFile(File): class ProjectBlock(Block): - project = models.ForeignKey(Project, verbose_name=_('project'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) diff --git a/app/organization/projects/translation.py b/app/organization/projects/translation.py index 2b3a87a0..3ce5a108 100644 --- a/app/organization/projects/translation.py +++ b/app/organization/projects/translation.py @@ -51,7 +51,7 @@ class ProjectFileTranslationOptions(TranslationOptions): @register(ProjectBlock) class ProjectBlockTranslationOptions(TranslationOptions): - pass + fields = ('title', 'description', 'content') @register(ProjectLink) diff --git a/app/organization/projects/views.py b/app/organization/projects/views.py index c3870f25..cdb02a88 100644 --- a/app/organization/projects/views.py +++ b/app/organization/projects/views.py @@ -29,31 +29,41 @@ from organization.core.views import * from organization.magazine.views import Article from organization.pages.models import CustomPage -class ProjectDetailView(SlugMixin, DetailView): - model = Project - template_name='projects/project_detail.html' - context_object_name = 'project' +class ProjectMixin(object): - def get_context_data(self, **kwargs): - context = super(ProjectDetailView, self).get_context_data(**kwargs) - project = self.get_object() + def get_context_data_mixin(self, context): department = None - if project.lead_team: - if project.lead_team.department: - department = project.lead_team.department + if self.project.lead_team: + if self.project.lead_team.department: + department = self.project.lead_team.department else: - for team in project.teams.all(): + for team in self.project.teams.all(): if team.department: department = team.department break context['department'] = department - if project.topic and project.topic.parent: - context['page'] = project.topic.parent.pages.all().first() - elif project.topic: - context['page'] = project.topic.pages.all().first() + if self.project.topic and self.project.topic.parent: + context['page'] = self.project.topic.parent.pages.all().first() + elif self.project.topic: + context['page'] = self.project.topic.pages.all().first() + + return context + + +class ProjectDetailView(SlugMixin, ProjectMixin, DetailView): + + model = Project + template_name='projects/project_detail.html' + context_object_name = 'project' + + def get_context_data(self, **kwargs): + context = super(ProjectDetailView, self).get_context_data(**kwargs) + self.project = self.get_object() + self.get_context_data_mixin(context) + context['next'] = reverse_lazy('organization-project-detail', kwargs={'slug': self.project.slug}) return context @@ -86,7 +96,7 @@ class DynamicContentProjectView(Select2QuerySetSequenceView): return results -class ProjectDemoDetailView(SlugMixin, DetailView): +class ProjectDemoDetailView(SlugMixin, ProjectMixin, DetailView): model = ProjectDemo template_name='projects/project_demo_detail.html' @@ -96,22 +106,5 @@ class ProjectDemoDetailView(SlugMixin, DetailView): context = super(ProjectDemoDetailView, self).get_context_data(**kwargs) demo = self.get_object() project = demo.project - department = None - - if project: - if project.lead_team: - if project.lead_team.department: - department = project.lead_team.department - else: - for team in project.teams.all(): - if team.department: - department = team.department - break - - context['department'] = department - if project.topic and project.topic.parent: - context['page'] = project.topic.parent.pages.all().first() - elif project.topic: - context['page'] = project.topic.pages.all().first() - + self.get_context_data_mixin(context) return context diff --git a/app/templates/accounts/account_login.html b/app/templates/accounts/account_login.html index 9bd1a402..4fbbbaf5 100644 --- a/app/templates/accounts/account_login.html +++ b/app/templates/accounts/account_login.html @@ -20,7 +20,6 @@ {% else %} {% include 'accounts/account_form.html'%} {% url "signup" as signup_url %} -

{% blocktrans with request.GET.next as next %}If you don't have an account you can sign up for one now.{% endblocktrans %}

{% url "mezzanine_password_reset" as password_reset_url %} {% url "profile_update" as profile_update_url %} {% blocktrans %}

You can also reset your password if you've forgotten it.

{% endblocktrans %}

diff --git a/app/templates/core/inc/block.html b/app/templates/core/inc/block.html index 8524a175..bdc2f697 100644 --- a/app/templates/core/inc/block.html +++ b/app/templates/core/inc/block.html @@ -1,7 +1,7 @@ {% load i18n mezzanine_tags keyword_tags pages_tags organization_tags %} {% if blocks %}
- {% if blocks.first.content %} + {% if blocks.first %}
{% endif %} {% for block in blocks %} diff --git a/app/templates/projects/inc/project_block.html b/app/templates/projects/inc/project_block.html new file mode 100644 index 00000000..162e5774 --- /dev/null +++ b/app/templates/projects/inc/project_block.html @@ -0,0 +1,45 @@ +{% load i18n mezzanine_tags keyword_tags pages_tags organization_tags %} +{% if blocks %} +
+ {% for block in blocks %} + {% if block.content %} + {% if not forloop.first and block.with_separator %} +
+ {% endif %} +
+
+
+
+ {% editable block.title %} +

{{ block.title }}

+ {% endeditable %} + {% if block.description %} +
+ {% editable block.description %} + {{ block.description }} + {% endeditable %} +
+ {% endif %} + {% if block.login_required and not user.is_authenticated %} +
+ {% trans "Please login to get links to the data" %}

+ {% trans "Login" %} +
+ {% else %} + {% if block.content %} + {% editable block.content %} + {{ block.content|richtext_filters|safe }} + {% endeditable %} + {% endif %} + {% endif %} +
+
+
+
+ {% endif %} + {% endfor %} + {% if blocks.last %} +
+ {% endif %} +
+{% endif %} diff --git a/app/templates/projects/project_detail.html b/app/templates/projects/project_detail.html index 07137d54..267db9dc 100644 --- a/app/templates/projects/project_detail.html +++ b/app/templates/projects/project_detail.html @@ -269,7 +269,7 @@ {% endif %} {% with project.blocks.all as blocks %} - {% include "core/inc/block.html" %} + {% include "projects/inc/project_block.html" %} {% endwith %} {% endblock %} -- 2.39.5