From 2f58e85108ddb01416d8f88914c6731b3cb54593 Mon Sep 17 00:00:00 2001 From: Emilie Date: Wed, 28 Sep 2016 15:10:02 +0200 Subject: [PATCH] File Block : add to Person & Project | repair person list in customPage --- app/organization/core/models.py | 16 ++++++++++ app/organization/network/admin.py | 13 +++++++- .../network/migrations/0024_personfile.py | 31 +++++++++++++++++++ app/organization/network/models.py | 5 +++ app/organization/network/translation.py | 6 ++++ app/organization/projects/admin.py | 12 ++++++- .../projects/migrations/0016_projectfile.py | 31 +++++++++++++++++++ app/organization/projects/models.py | 5 +++ app/organization/projects/translation.py | 6 ++++ .../network/inc/person/list_circle_style.html | 5 +-- app/templates/pages/custompage.html | 12 ++++--- 11 files changed, 133 insertions(+), 9 deletions(-) create mode 100644 app/organization/network/migrations/0024_personfile.py create mode 100644 app/organization/projects/migrations/0016_projectfile.py diff --git a/app/organization/core/models.py b/app/organization/core/models.py index dc6d6f64..2d93ea20 100644 --- a/app/organization/core/models.py +++ b/app/organization/core/models.py @@ -100,6 +100,22 @@ class Image(Titled, Orderable): return value +class File(Titled, Orderable): + + file = FileField(_("document"), max_length=1024, upload_to="Documents/%Y/%m/%d/") + + class Meta: + abstract = True + + def __str__(self): + value = self.description + if not value: + value = self.file.name + if not value: + value = "" + return value + + class DynamicContent(models.Model): # used for autocomplete but hidden in admin diff --git a/app/organization/network/admin.py b/app/organization/network/admin.py index b2527e85..87508dc5 100644 --- a/app/organization/network/admin.py +++ b/app/organization/network/admin.py @@ -98,6 +98,11 @@ class PersonImageInline(TabularDynamicInlineAdmin): model = PersonImage +class PersonFileInline(TabularDynamicInlineAdmin): + + model = PersonFile + + class PersonBlockInline(StackedDynamicInlineAdmin): model = PersonBlock @@ -106,7 +111,13 @@ class PersonBlockInline(StackedDynamicInlineAdmin): class PersonAdmin(BaseTranslationOrderedModelAdmin): model = Person - inlines = [PersonActivityInline, PersonAudioInline, PersonImageInline, PersonVideoInline, PersonBlockInline, PersonLinkInline ] + inlines = [PersonActivityInline, + PersonAudioInline, + PersonImageInline, + PersonVideoInline, + PersonBlockInline, + PersonLinkInline, + PersonFileInline ] first_fields = ['last_name', 'first_name', 'title', 'gender', 'user'] search_fields = ['last_name', 'first_name'] diff --git a/app/organization/network/migrations/0024_personfile.py b/app/organization/network/migrations/0024_personfile.py new file mode 100644 index 00000000..c6d3fa13 --- /dev/null +++ b/app/organization/network/migrations/0024_personfile.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-09-28 12:32 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import mezzanine.core.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-network', '0023_auto_20160921_2043'), + ] + + operations = [ + migrations.CreateModel( + name='PersonFile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='document')), + ('person', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='files', to='organization-network.Person', verbose_name='person')), + ], + options={ + 'ordering': ('_order',), + }, + ), + ] diff --git a/app/organization/network/models.py b/app/organization/network/models.py index 37b71265..9bf3ab18 100644 --- a/app/organization/network/models.py +++ b/app/organization/network/models.py @@ -234,6 +234,11 @@ class PersonImage(Image): person = models.ForeignKey(Person, verbose_name=_('person'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL) +class PersonFile(File): + + person = models.ForeignKey(Person, verbose_name=_('person'), related_name='files', blank=True, null=True, on_delete=models.SET_NULL) + + class PersonBlock(Block): person = models.ForeignKey(Person, verbose_name=_('person'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) diff --git a/app/organization/network/translation.py b/app/organization/network/translation.py index 9319ba8d..fec21ee2 100644 --- a/app/organization/network/translation.py +++ b/app/organization/network/translation.py @@ -69,6 +69,12 @@ class PersonImageTranslationOptions(TranslationOptions): pass +@register(PersonFile) +class PersonFileTranslationOptions(TranslationOptions): + + pass + + @register(PersonBlock) class PersonBlockTranslationOptions(TranslationOptions): diff --git a/app/organization/projects/admin.py b/app/organization/projects/admin.py index bd9eb4a3..e2932d26 100644 --- a/app/organization/projects/admin.py +++ b/app/organization/projects/admin.py @@ -36,6 +36,11 @@ class ProjectVideoInline(StackedDynamicInlineAdmin): model = ProjectVideo +class ProjectFileInline(TabularDynamicInlineAdmin): + + model = ProjectFile + + class ProjectAdmin(admin.ModelAdmin): model = Project @@ -44,7 +49,12 @@ class ProjectAdmin(admin.ModelAdmin): class ProjectAdminDisplayable(DisplayableAdmin): fieldsets = deepcopy(ProjectAdmin.fieldsets) - inlines = [ ProjectBlockInline, ProjectImageInline, ProjectAudioInline, ProjectVideoInline, ProjectLinkInline] + inlines = [ ProjectBlockInline, + ProjectImageInline, + ProjectAudioInline, + ProjectVideoInline, + ProjectLinkInline, + ProjectFileInline] filter_horizontal = ['teams', 'organizations'] list_filter = ['type', 'program', 'program_type', ] diff --git a/app/organization/projects/migrations/0016_projectfile.py b/app/organization/projects/migrations/0016_projectfile.py new file mode 100644 index 00000000..6300e364 --- /dev/null +++ b/app/organization/projects/migrations/0016_projectfile.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-09-28 13:02 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import mezzanine.core.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-projects', '0015_project_lead_organization'), + ] + + operations = [ + migrations.CreateModel( + name='ProjectFile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='document')), + ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='files', to='organization-projects.Project', verbose_name='project')), + ], + options={ + 'ordering': ('_order',), + }, + ), + ] diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py index abef3c3d..70d3f248 100644 --- a/app/organization/projects/models.py +++ b/app/organization/projects/models.py @@ -99,6 +99,11 @@ class ProjectImage(Image): project = models.ForeignKey(Project, verbose_name=_('project'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL) +class ProjectFile(File): + + project = models.ForeignKey(Project, verbose_name=_('project'), related_name='files', blank=True, null=True, on_delete=models.SET_NULL) + + 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 302cbeea..fea7a757 100644 --- a/app/organization/projects/translation.py +++ b/app/organization/projects/translation.py @@ -27,6 +27,12 @@ class ProjectImageTranslationOptions(TranslationOptions): pass +@register(ProjectFile) +class ProjectFileTranslationOptions(TranslationOptions): + + pass + + @register(ProjectBlock) class ProjectBlockTranslationOptions(TranslationOptions): diff --git a/app/templates/network/inc/person/list_circle_style.html b/app/templates/network/inc/person/list_circle_style.html index de0911d4..08e4a94e 100644 --- a/app/templates/network/inc/person/list_circle_style.html +++ b/app/templates/network/inc/person/list_circle_style.html @@ -59,8 +59,9 @@ {% elif person.bio %}
{{ person.bio|richtext_filters|safe }}
{% endif %} - - {% trans "resume" %} + {% if person.files.first %} + {% trans "resume" %} + {% endif %} {% for link in person.links.all %} {% if link %} {{ link.link_type.name }} diff --git a/app/templates/pages/custompage.html b/app/templates/pages/custompage.html index 2d9ac1a2..56a5b6d5 100644 --- a/app/templates/pages/custompage.html +++ b/app/templates/pages/custompage.html @@ -99,11 +99,13 @@ {% endblock %} {% block page_person_list %} - {% for inline in page.custompage.page_custom_person_list_block_inlines.all %} - {% with "network/inc/person/list_"|add:inline.person_list_block.style|add:"_style.html" as template %} - {% include template %} - {% endwith %} - {% endfor %} + {% for page_custom_person_list_block_inline in page.custompage.page_custom_person_list_block_inlines.all %} + {% with page_custom_person_list_block_inline.person_list_block as person_list_block %} + {% with "network/inc/person/list_"|add:person_list_block.style|add:"_style.html" as template %} + {% include template %} + {% endwith %} + {% endwith %} + {% endfor %} {% endblock %} {% block page_sub_content %} -- 2.39.5