From: Guillaume Pellerin
Date: Tue, 3 Jan 2017 15:59:31 +0000 (+0100)
Subject: Add login for blocks, add project block template with login option
X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=65b21e2291997e97e51412fb9cd9d5968a158b0f;p=mezzo.git
Add login for blocks, add project block template with login option
---
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 %}
+
+ {% 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 %}