From 5e2a4122421da6bfc29f96838ca1bf4b65ed6507 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 7 Mar 2017 16:51:51 +0100 Subject: [PATCH] Update ProjectCall, add Residency and ProjectProducer, add related templates --- app/organization/core/models.py | 19 +- app/organization/media/urls.py | 4 +- app/organization/projects/admin.py | 5 +- app/organization/projects/forms.py | 14 + .../migrations/0048_auto_20170307_1540.py | 89 +++++ app/organization/projects/models.py | 34 +- app/organization/projects/translation.py | 2 +- app/organization/projects/urls.py | 27 +- app/organization/projects/views.py | 63 +++- .../projects/project_call_detail.html | 351 ++++++++++++++++++ .../templates/projects/project_call_list.html | 0 .../projects/project_ict_create.html | 9 + .../projects/project_ict_detail.html | 351 ++++++++++++++++++ .../templates/projects/project_ict_list.html | 0 .../projects/project_producer_create.html | 50 +++ .../projects/project_producer_detail.html | 0 .../projects/project_producer_list.html | 0 .../projects/project_residency_create.html | 50 +++ .../projects/project_residency_detail.html | 0 .../projects/project_residency_list.html | 0 var | 2 +- 21 files changed, 1049 insertions(+), 21 deletions(-) create mode 100644 app/organization/projects/migrations/0048_auto_20170307_1540.py create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_call_detail.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_call_list.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_ict_detail.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_ict_list.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_producer_create.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_producer_detail.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_producer_list.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_residency_create.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_residency_detail.html create mode 100644 app/themes/vertigo_starts_eu/templates/projects/project_residency_list.html diff --git a/app/organization/core/models.py b/app/organization/core/models.py index c4764827..3811a4d1 100644 --- a/app/organization/core/models.py +++ b/app/organization/core/models.py @@ -34,7 +34,9 @@ from django_countries.fields import CountryField COLOR_CHOICES = (('black', _('black')), ('yellow', _('yellow')), ('red', _('red')), ('white', _('white')),) + ALIGNMENT_CHOICES = (('left', _('left')), ('center', _('center')), ('right', _('right'))) + IMAGE_TYPE_CHOICES = (('logo', _('logo')), ('logo_white', _('logo white')), ('logo_black', _('logo black')), ('logo_header', _('logo header')), ('logo_footer', _('logo footer')), ('slider', _('slider')), ('card', _('card')), ('page_slider', _('page - slider')), ('page_featured', _('page - featured'))) @@ -50,29 +52,32 @@ class Description(models.Model): class NamedOnly(models.Model): """Abstract model providing a name field only""" - name = models.CharField(_('name'), max_length=512) + name = models.CharField(_('name'), max_length=512, blank=True) class Meta: abstract = True - ordering = ['name',] def __str__(self): return self.name - @property - def slug(self): - return slugify(self.__unicode__()) - -class Named(NamedOnly): +class Named(models.Model): """Abstract model providing a name field and a description""" + name = models.CharField(_('name'), max_length=512) description = models.TextField(_('description'), blank=True) class Meta: abstract = True ordering = ['name',] + def __str__(self): + return self.name + + @property + def slug(self): + return slugify(self.__str__()) + class Titled(models.Model): """Abstract model providing a title field""" diff --git a/app/organization/media/urls.py b/app/organization/media/urls.py index e4683114..d0d65e21 100644 --- a/app/organization/media/urls.py +++ b/app/organization/media/urls.py @@ -34,8 +34,8 @@ from organization.media.views import * urlpatterns = [ url("^playlist/overlay/(?P.*)/$", PlaylistOverlayView.as_view(), name="organization-playlist-overlay"), - url("^(?P.*)/detail/(?P.*)/$", MediaDetailView.as_view(), name="organization-media-detail"), - url("^(?P.*)/overlay/(?P.*)/$", MediaOverlayView.as_view(), name="organization-media-overlay"), + url("^media/(?P.*)/detail/(?P.*)/$", MediaDetailView.as_view(), name="organization-media-detail"), + url("^media/(?P.*)/overlay/(?P.*)/$", MediaOverlayView.as_view(), name="organization-media-overlay"), url("^playlist/detail/(?P.*)/$", PlaylistDetailView.as_view(), name="organization-playlist-detail"), url("^playlist/list/$", PlaylistListView.as_view(), name="organization-playlist-list"), url("^playlist/list/(?P.*)$", PlaylistListView.as_view(), name="organization-playlist-list"), diff --git a/app/organization/projects/admin.py b/app/organization/projects/admin.py index 45924e0e..2d7ed3ed 100644 --- a/app/organization/projects/admin.py +++ b/app/organization/projects/admin.py @@ -198,7 +198,8 @@ class ProjectCallAdminDisplayable(DisplayableAdmin): ProjectCallLinkInline, ProjectCallFileInline, ] - list_display = ['title', 'date_from', 'date_to', 'status', 'admin_link'] + # list_filter = ['type', 'program', 'program_type', null_filter('external_id')] + # list_display = ['title', 'date_from', 'date_to', 'status', 'admin_link'] admin.site.register(Project, ProjectAdminDisplayable) @@ -210,4 +211,4 @@ admin.site.register(ProjectDemo, ProjectDemoAdmin) admin.site.register(Repository) admin.site.register(RepositorySystem) admin.site.register(ProjectWorkPackage, ProjectWorkPackageAdmin) -# admin.site.register(ProjectCall, ProjectCallAdminDisplayable) +admin.site.register(ProjectCall, ProjectCallAdminDisplayable) diff --git a/app/organization/projects/forms.py b/app/organization/projects/forms.py index e12c9ad7..8467ab14 100644 --- a/app/organization/projects/forms.py +++ b/app/organization/projects/forms.py @@ -86,3 +86,17 @@ class ProjectContactInline(InlineFormSet): max_num = 1 model = ProjectContact fields = ('gender', 'person_title', 'first_name', 'last_name', 'address', 'email', 'telephone', 'bio', 'address', 'postal_code', 'city', 'country') + + +class ProducerForm(ModelForm): + + class Meta: + model = Organization + fields = '__all__' + + +class ProjectResidencyForm(ModelForm): + + class Meta: + model = ProjectResidency + fields = '__all__' diff --git a/app/organization/projects/migrations/0048_auto_20170307_1540.py b/app/organization/projects/migrations/0048_auto_20170307_1540.py new file mode 100644 index 00000000..7a44e89c --- /dev/null +++ b/app/organization/projects/migrations/0048_auto_20170307_1540.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.11 on 2017-03-07 14:40 +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 = [ + ('sites', '0002_alter_domain_unique'), + ('organization-network', '0089_auto_20170303_1637'), + ('organization-projects', '0047_remove_projectictdata_contact'), + ] + + operations = [ + migrations.CreateModel( + name='ProjectResidency', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)), + ('title', models.CharField(max_length=500, verbose_name='Title')), + ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')), + ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')), + ('description', models.TextField(blank=True, verbose_name='Description')), + ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')), + ('created', models.DateTimeField(editable=False, null=True)), + ('updated', models.DateTimeField(editable=False, null=True)), + ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')), + ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')), + ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')), + ('short_url', models.URLField(blank=True, null=True)), + ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')), + ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), + ('date_from', models.DateField(blank=True, null=True, verbose_name='begin date')), + ('date_to', models.DateField(blank=True, null=True, verbose_name='end date')), + ('validated', models.BooleanField(default=False)), + ('producer_commitment', models.TextField(verbose_name='producer commitment')), + ('artist', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='residencies', to='organization-network.Person', verbose_name='artist')), + ('producer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='residencies', to='organization-network.Organization', verbose_name='producer')), + ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='residencies', to='organization-projects.Project', verbose_name='project')), + ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), + ], + options={ + 'verbose_name_plural': 'Project residencies', + 'verbose_name': 'Project residency', + }, + ), + migrations.CreateModel( + name='ProjectResidencyFile', + 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')), + ('residency', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='files', to='organization-projects.ProjectResidency', verbose_name='project residency file')), + ], + options={ + 'ordering': ('_order',), + }, + ), + migrations.AlterModelOptions( + name='projectcall', + options={'ordering': ['title'], 'verbose_name': 'project call', 'verbose_name_plural': 'project calls'}, + ), + migrations.AddField( + model_name='projectcall', + name='producer_form_content', + field=mezzanine.core.fields.RichTextField(blank=True, null=True, verbose_name='Producer form content'), + ), + migrations.AddField( + model_name='projectcall', + name='project_form_content', + field=mezzanine.core.fields.RichTextField(blank=True, null=True, verbose_name='Project form content'), + ), + migrations.AddField( + model_name='projectcall', + name='residency_form_content', + field=mezzanine.core.fields.RichTextField(blank=True, null=True, verbose_name='Residency form content'), + ), + migrations.AlterField( + model_name='projectcall', + name='name', + field=models.CharField(blank=True, max_length=512, verbose_name='name'), + ), + ] diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py index 18ef493d..d113b487 100644 --- a/app/organization/projects/models.py +++ b/app/organization/projects/models.py @@ -179,10 +179,14 @@ class ProjectTopicPage(Page, SubTitled): class ProjectCall(Displayable, Period, RichText, NamedOnly): + project_form_content = RichTextField(_("Project form content"), blank=True, null=True) + residency_form_content = RichTextField(_("Residency form content"), blank=True, null=True) + producer_form_content = RichTextField(_("Producer form content"), blank=True, null=True) + class Meta: verbose_name = _('project call') verbose_name_plural = _("project calls") - ordering = ['title', 'name',] + ordering = ['title',] def __str__(self): return self.title @@ -190,6 +194,13 @@ class ProjectCall(Displayable, Period, RichText, NamedOnly): def get_absolute_url(self): return reverse("organization-call-detail", kwargs={"slug": self.slug}) + def save(self, *args, **kwargs): + if not self.name and self.title: + self.name = self.title + if not self.title and self.name: + self.title = self.name + super(ProjectCall, self).save(args, kwargs) + class ProjectCallBlock(Block): @@ -348,3 +359,24 @@ class ProjectContact(Person): class Meta: verbose_name = 'Project contact' verbose_name_plural = 'Project contacts' + + +class ProjectResidency(Displayable, Period, RichText): + + project = models.ForeignKey(Project, verbose_name=_('project'), related_name='residencies', blank=True, null=True, on_delete=models.SET_NULL) + artist = models.ForeignKey(Person, verbose_name=_('artist'), related_name='residencies', blank=True, null=True, on_delete=models.SET_NULL) + producer = models.ForeignKey('organization-network.Organization', verbose_name=_('producer'), related_name='residencies', blank=True, null=True, on_delete=models.SET_NULL) + validated = models.BooleanField(default=False) + producer_commitment = models.TextField(_('producer commitment'), help_text="") + + class Meta: + verbose_name = 'Project residency' + verbose_name_plural = 'Project residencies' + + def get_absolute_url(self): + return reverse("organization-residency-detail", kwargs={"slug": self.slug}) + + +class ProjectResidencyFile(File): + + residency = models.ForeignKey(ProjectResidency, verbose_name=_('project residency file'), related_name='files', blank=True, null=True, on_delete=models.SET_NULL) diff --git a/app/organization/projects/translation.py b/app/organization/projects/translation.py index 8dff852b..886d0a02 100644 --- a/app/organization/projects/translation.py +++ b/app/organization/projects/translation.py @@ -129,7 +129,7 @@ class ProjectICTDataTranslationOptions(TranslationOptions): @register(ProjectCall) class ProjectCallTranslationOptions(TranslationOptions): - fields = ('title', 'description', 'content') + fields = ('title', 'description', 'content',) @register(ProjectCallBlock) diff --git a/app/organization/projects/urls.py b/app/organization/projects/urls.py index 1d7b18d1..e9c91a36 100644 --- a/app/organization/projects/urls.py +++ b/app/organization/projects/urls.py @@ -31,11 +31,26 @@ from mezzanine.conf import settings from organization.projects.views import * urlpatterns = [ - url("^project/detail/(?P.*)/$", ProjectDetailView.as_view(), name='organization-project-detail'), url("^dynamic-content-project/$", permission_required('project.can_edit')(DynamicContentProjectView.as_view()), name='dynamic-content-project'), - url("^project/demo/(?P.*)/$", ProjectDemoDetailView.as_view(), name='organization-project-demo-detail'), - url("^project/blog/(?P.*)/$", ProjectBlogPageView.as_view(), name='organization-project-blogpage-detail'), - url("^project/ict/create/$", ProjectICTCreateView.as_view(), name='organization-project-create'), - url("^call/detail/(?P.*)/$", ProjectCallDetailView.as_view(), name='organization-call-detail'), - url("^call/list/$", ProjectCallListView.as_view(), name='organization-call-list'), + + url("^project/detail/(?P.*)/$", ProjectDetailView.as_view(), name='organization-project-detail'), + url("^projects/demo/(?P.*)/$", ProjectDemoDetailView.as_view(), name='organization-project-demo-detail'), + url("^projects/blog/(?P.*)/$", ProjectBlogPageView.as_view(), name='organization-project-blogpage-detail'), + + url("^calls/list/$", ProjectCallListView.as_view(), name='organization-call-list'), + url("^calls/detail/(?P.*)/$", ProjectCallDetailView.as_view(), name='organization-call-detail'), + + url("^calls/detail/(?P.*)/projects/submission/$", ProjectICTCreateView.as_view(), name='organization-project-create'), + url("^calls/detail/(?P.*)/projects/detail/(?P.*)/$", ProjectICTDetailView.as_view(), name='organization-project-detail'), + url("^calls/detail/(?P.*)/projects/lists/$", ProjectICTListView.as_view(), name='organization-project-list'), + + url("^calls/detail/(?P.*)/producers/submission/$", ProducerCreateView.as_view(), name='organization-producer-create'), + url("^calls/detail/(?P.*)/producers/detail/(?P.*)/$", ProducerDetailView.as_view(), name='organization-producer-detail'), + url("^calls/detail/(?P.*)/producers/lists/$", ProducerListView.as_view(), name='organization-producer-list'), + + url("^calls/detail/(?P.*)/residencies/submission/$", ProjectResidencyCreateView.as_view(), name='organization-residency-create'), + url("^calls/detail/(?P.*)/residencies/detail/(?P.*)/$", ProjectResidencyDetailView.as_view(), name='organization-residency-detail'), + url("^calls/detail/(?P.*)/residencies/lists/$", ProjectResidencyListView.as_view(), name='organization-residency-list'), + + ] diff --git a/app/organization/projects/views.py b/app/organization/projects/views.py index 8cc162b6..6f7d1d2d 100644 --- a/app/organization/projects/views.py +++ b/app/organization/projects/views.py @@ -68,6 +68,18 @@ class ProjectDetailView(SlugMixin, ProjectMixin, DetailView): template_name='projects/project_detail.html' +class ProjectICTDetailView(SlugMixin, ProjectMixin, DetailView): + + model = Project + template_name='projects/project_ict_detail.html' + + +class ProjectListView(ListView): + + model = Project + template_name='projects/project_list.html' + + class DynamicContentProjectView(Select2QuerySetSequenceView): paginate_by = settings.DAL_MAX_RESULTS @@ -122,6 +134,15 @@ class ProjectICTCreateView(CreateWithInlinesView): template_name='projects/project_ict_create.html' inlines = [ProjectICTDataInline, ProjectSimpleImageInline, ProjectContactInline,] + def get_context_data(self, **kwargs): + context['call'] = get_object_or_404(ProjectCall, slug=self.kwargs['call_slug']) + return context + +class ProjectICTListView(ListView): + + model = Project + template_name='projects/project_ict_list.html' + class ProjectCallDetailView(SlugMixin, DetailView): @@ -129,7 +150,47 @@ class ProjectCallDetailView(SlugMixin, DetailView): template_name='projects/project_call_detail.html' -class ProjectCallListView(SlugMixin, ListView): +class ProjectCallListView(ListView): model = ProjectCall template_name='projects/project_call_list.html' + + +class ProducerDetailView(SlugMixin, DetailView): + + model = Organization + template_name='projects/project_producer_detail.html' + + +class ProducerListView(ListView): + + model = Organization + template_name='projects/project_producer_list.html' + + +class ProducerCreateView(CreateWithInlinesView): + + model = Organization + form_class = ProducerForm + template_name='projects/project_producer_create.html' + # inlines = [OrganizationICTDataInline, OrganizationSimpleImageInline, OrganizationContactInline,] + + +class ProjectResidencyDetailView(SlugMixin, DetailView): + + model = ProjectResidency + template_name='projects/project_residency_detail.html' + + +class ProjectResidencyListView(ListView): + + model = ProjectResidency + template_name='projects/project_residency_list.html' + + +class ProjectResidencyCreateView(CreateWithInlinesView): + + model = ProjectResidency + form_class = ProjectResidencyForm + template_name='projects/project_residency_create.html' + inlines = [] diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_call_detail.html b/app/themes/vertigo_starts_eu/templates/projects/project_call_detail.html new file mode 100644 index 00000000..b9d35bbd --- /dev/null +++ b/app/themes/vertigo_starts_eu/templates/projects/project_call_detail.html @@ -0,0 +1,351 @@ +{% extends "vertigo_starts_eu/pages/page.html" %} +{% load mezzanine_tags keyword_tags i18n organization_tags pages_tags %} + +{% block meta_title %}{{ object.meta_title }}{% endblock %} + +{% block meta_keywords %}{% metablock %} +{% keywords_for object as keywords %} +{% for keyword in keywords %} + {% if not forloop.first %}, {% endif %} + {{ keyword }} +{% endfor %} +{% endmetablock %}{% endblock %} + +{% block page_class %} + object +{% endblock %} + +{% block body_class %} + pattern pattern-bg {{ department.pages.all.0.weaving_css_class }} +{% endblock %} + +{% block breadcrumb_menu %} + {{ block.super }} + +{% endblock %} + +{% block page_tags %} + + {% comment %} + {% if department %} +
+ {{ department.pages.all.0.title }} +
+ {% endif %} +
+ {% trans 'Project' %} +
+ {% endcomment %} + +{% endblock %} + +{% block page_title %} + + {% editable object.title %} +

{{ object.title }}

+ {% endeditable %} + + {% with page.get_ascendants|last as top_level_parent %} + {% if linked_organization_content and research_slug == top_level_parent.slug %} + {% include 'pages/page/includes/linked_organization_content.html' %} + {% endif %} + {% endwith %} + + {% if object.description %} + {% editable object.description %} +
+ {{ object.description }} +
+ {% endeditable %} + {% endif %} + +{% endblock %} + +{% block page_content %} + {% if object.content %} + {% editable object.content %} + {{ object.content|richtext_filters|safe }} + {% endeditable %} + {% endif %} +{% endblock %} + +{% block page_sidebar %} + +{% endblock %} + +{% block page_link %} + {% with object.links.all as links %} + {% if links %} + {% include 'core/inc/link.html' %} + {% endif %} + {% endwith %} +{% endblock %} + +{% block page_audio %} + {% with object as object %} + {{ block.super }} + {% endwith %} +{% endblock %} + +{% block page_slider %} + {% with object as object %} + {{ block.super }} + {% endwith %} +{% endblock %} + +{% block page_video %} + {% with object as object %} + {{ block.super }} + {% endwith %} +{% endblock %} + +{% block page_sub_content %} + + {% if object.type == 'external' %} +
+ +
+
+
+
+
+
+
+

{% trans "Project details" %}

+ +
+ {% if object.program %} +
+
+ {% trans "Program" %} +
+
+ {{ object.program }} +
+
+ {% endif %} + + {% if object.program_type %} +
+
+ {% trans "Program type" %} +
+
+ {{ object.program_type }} +
+
+ {% endif %} + +
+
+ {% trans "Beginning" %} +
+
+ {{ object.date_from }} +
+
+ +
+
+ {% trans "End" %} +
+
+ {{ object.date_to }} +
+
+ +
+
+ {% trans "Status" %} +
+
+ {{ object.object_status }} +
+
+ + {% if object.website %} +
+
+ {% trans "Website" %} +
+ +
+ {% endif %} + + + +
+
+
+
+
+

{% trans "Participants" %}

+ +
+ + {% if object.lead_team or object.lead_organization %} +
+ {% if object.lead_team %} +
+ {% trans "Project lead team" %} +
+ + {% elif object.lead_organization %} +
+ {% trans "Project lead organization" %} +
+ + {% endif %} +
+ {% endif %} + +
+
+ {% trans "Partners" %} +
+
+ {% for organization in object.organizations.all %} + {% if organization.url %} + + {% endif %} + {{ organization }}
+ {% if organization.url %} +
+ {% endif %} + {% endfor %} +
+ +
+ {% trans "teams" %} ({{ host_organization }}) +
+
+ {% for team in object.teams.all %} + {% if team.pages.all %} + {{ team.short }}
+ {% endif %} + {% endfor %} +
+
+
+
+
+
+
+
+
+
+
+ {% endif %} + + {% with object.blocks.all as blocks %} + {% include "projects/inc/project_block.html" %} + {% endwith %} +{% endblock %} + +{% block page_demo %} +{% if object.demos.all %} +
+
+
+
+
+
+
    +

    {% trans "Demos" %}

    + {% for demo in object.demos.all %} +
  • {{ demo.title }}
  • + {% endfor %} +
+
+
+
+
+
+{% endif %} +{% endblock %} + +{% block page_blog %} +{% if object.blog_pages.all %} +
+
+
+
+
+
+
    +

    {% trans "Blog Pages" %}

    + {% for blog_page in object.blog_pages.all %} +
  • {{ blog_page.title }}
  • + {% endfor %} +
+
+
+
+
+
+{% endif %} +{% endblock %} + +{% block logo %} + {% if object.organizations.all|length > 0 %} +
+
+
+
+
+
    + {% if object.lead_organization %} + {% with object.lead_organization.images.all|get_type:'logo' as images %} + {% include 'core/inc/logo.html' %} + {% endwith %} + {% endif %} + {% for organization in object.organizations.all %} + {% with organization.images.all|get_type:'logo' as images %} + {% include 'core/inc/logo.html' %} + {% endwith %} + {% endfor %} +
+
+
+
+
+
+ {% endif %} +{% endblock %} + +{% block page_related_content %} + {% with dynamic_content=object.dynamic_content_object.all|filter_content object=object %} + {% include "core/inc/related_content.html" %} + {% endwith %} +{% endblock %} diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_call_list.html b/app/themes/vertigo_starts_eu/templates/projects/project_call_list.html new file mode 100644 index 00000000..e69de29b diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_ict_create.html b/app/themes/vertigo_starts_eu/templates/projects/project_ict_create.html index a5d08a2b..1f0e9402 100644 --- a/app/themes/vertigo_starts_eu/templates/projects/project_ict_create.html +++ b/app/themes/vertigo_starts_eu/templates/projects/project_ict_create.html @@ -24,6 +24,15 @@ {% endblock %} {% block page_content %} + +
+ {% if object.content %} + {% editable object.content %} + {{ call.project_form_content|richtext_filters|safe }} + {% endeditable %} + {% endif %} +
+
{% errors_for form %}
diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_ict_detail.html b/app/themes/vertigo_starts_eu/templates/projects/project_ict_detail.html new file mode 100644 index 00000000..b9d35bbd --- /dev/null +++ b/app/themes/vertigo_starts_eu/templates/projects/project_ict_detail.html @@ -0,0 +1,351 @@ +{% extends "vertigo_starts_eu/pages/page.html" %} +{% load mezzanine_tags keyword_tags i18n organization_tags pages_tags %} + +{% block meta_title %}{{ object.meta_title }}{% endblock %} + +{% block meta_keywords %}{% metablock %} +{% keywords_for object as keywords %} +{% for keyword in keywords %} + {% if not forloop.first %}, {% endif %} + {{ keyword }} +{% endfor %} +{% endmetablock %}{% endblock %} + +{% block page_class %} + object +{% endblock %} + +{% block body_class %} + pattern pattern-bg {{ department.pages.all.0.weaving_css_class }} +{% endblock %} + +{% block breadcrumb_menu %} + {{ block.super }} + +{% endblock %} + +{% block page_tags %} + + {% comment %} + {% if department %} +
+ {{ department.pages.all.0.title }} +
+ {% endif %} +
+ {% trans 'Project' %} +
+ {% endcomment %} + +{% endblock %} + +{% block page_title %} + + {% editable object.title %} +

{{ object.title }}

+ {% endeditable %} + + {% with page.get_ascendants|last as top_level_parent %} + {% if linked_organization_content and research_slug == top_level_parent.slug %} + {% include 'pages/page/includes/linked_organization_content.html' %} + {% endif %} + {% endwith %} + + {% if object.description %} + {% editable object.description %} +
+ {{ object.description }} +
+ {% endeditable %} + {% endif %} + +{% endblock %} + +{% block page_content %} + {% if object.content %} + {% editable object.content %} + {{ object.content|richtext_filters|safe }} + {% endeditable %} + {% endif %} +{% endblock %} + +{% block page_sidebar %} + +{% endblock %} + +{% block page_link %} + {% with object.links.all as links %} + {% if links %} + {% include 'core/inc/link.html' %} + {% endif %} + {% endwith %} +{% endblock %} + +{% block page_audio %} + {% with object as object %} + {{ block.super }} + {% endwith %} +{% endblock %} + +{% block page_slider %} + {% with object as object %} + {{ block.super }} + {% endwith %} +{% endblock %} + +{% block page_video %} + {% with object as object %} + {{ block.super }} + {% endwith %} +{% endblock %} + +{% block page_sub_content %} + + {% if object.type == 'external' %} +
+ +
+
+
+
+
+
+
+

{% trans "Project details" %}

+ +
+ {% if object.program %} +
+
+ {% trans "Program" %} +
+
+ {{ object.program }} +
+
+ {% endif %} + + {% if object.program_type %} +
+
+ {% trans "Program type" %} +
+
+ {{ object.program_type }} +
+
+ {% endif %} + +
+
+ {% trans "Beginning" %} +
+
+ {{ object.date_from }} +
+
+ +
+
+ {% trans "End" %} +
+
+ {{ object.date_to }} +
+
+ +
+
+ {% trans "Status" %} +
+
+ {{ object.object_status }} +
+
+ + {% if object.website %} +
+
+ {% trans "Website" %} +
+ +
+ {% endif %} + + + +
+
+
+
+
+

{% trans "Participants" %}

+ +
+ + {% if object.lead_team or object.lead_organization %} +
+ {% if object.lead_team %} +
+ {% trans "Project lead team" %} +
+ + {% elif object.lead_organization %} +
+ {% trans "Project lead organization" %} +
+ + {% endif %} +
+ {% endif %} + +
+
+ {% trans "Partners" %} +
+
+ {% for organization in object.organizations.all %} + {% if organization.url %} + + {% endif %} + {{ organization }}
+ {% if organization.url %} +
+ {% endif %} + {% endfor %} +
+ +
+ {% trans "teams" %} ({{ host_organization }}) +
+
+ {% for team in object.teams.all %} + {% if team.pages.all %} + {{ team.short }}
+ {% endif %} + {% endfor %} +
+
+
+
+
+
+
+
+
+
+
+ {% endif %} + + {% with object.blocks.all as blocks %} + {% include "projects/inc/project_block.html" %} + {% endwith %} +{% endblock %} + +{% block page_demo %} +{% if object.demos.all %} +
+
+
+
+
+
+
    +

    {% trans "Demos" %}

    + {% for demo in object.demos.all %} +
  • {{ demo.title }}
  • + {% endfor %} +
+
+
+
+
+
+{% endif %} +{% endblock %} + +{% block page_blog %} +{% if object.blog_pages.all %} +
+
+
+
+
+
+
    +

    {% trans "Blog Pages" %}

    + {% for blog_page in object.blog_pages.all %} +
  • {{ blog_page.title }}
  • + {% endfor %} +
+
+
+
+
+
+{% endif %} +{% endblock %} + +{% block logo %} + {% if object.organizations.all|length > 0 %} +
+
+
+
+
+
    + {% if object.lead_organization %} + {% with object.lead_organization.images.all|get_type:'logo' as images %} + {% include 'core/inc/logo.html' %} + {% endwith %} + {% endif %} + {% for organization in object.organizations.all %} + {% with organization.images.all|get_type:'logo' as images %} + {% include 'core/inc/logo.html' %} + {% endwith %} + {% endfor %} +
+
+
+
+
+
+ {% endif %} +{% endblock %} + +{% block page_related_content %} + {% with dynamic_content=object.dynamic_content_object.all|filter_content object=object %} + {% include "core/inc/related_content.html" %} + {% endwith %} +{% endblock %} diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_ict_list.html b/app/themes/vertigo_starts_eu/templates/projects/project_ict_list.html new file mode 100644 index 00000000..e69de29b diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_producer_create.html b/app/themes/vertigo_starts_eu/templates/projects/project_producer_create.html new file mode 100644 index 00000000..4c10cf08 --- /dev/null +++ b/app/themes/vertigo_starts_eu/templates/projects/project_producer_create.html @@ -0,0 +1,50 @@ +{% extends "vertigo_starts_eu/pages/page.html" %} +{% load mezzanine_tags keyword_tags i18n organization_tags pages_tags %} + +{% block meta_title %}{% endblock %} + +{% block meta_keywords %}{% endblock %} + +{% block body_class %} + pattern pattern-bg {{ department.pages.all.0.weaving_css_class }} +{% endblock %} + +{% block breadcrumb_menu %} + {{ block.super }} + +{% endblock %} + +{% block page_tags %} +{% endblock %} + +{% block page_title %} + {% editable object.title %} +

{% trans "New producer form" %}

+ {% endeditable %} +{% endblock %} + +{% block page_content %} +
+ {% errors_for form %} + + {% fields_for form %} + {% for formset in inlines %} + {{ formset.management_form }} + {% for form in formset %} + {% fields_for form %} + {% endfor %} + {% endfor %} +
+ +
+ +
+{% endblock %} + +{% block extra_js %} +{{ block.super }} + +{% endblock %} diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_producer_detail.html b/app/themes/vertigo_starts_eu/templates/projects/project_producer_detail.html new file mode 100644 index 00000000..e69de29b diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_producer_list.html b/app/themes/vertigo_starts_eu/templates/projects/project_producer_list.html new file mode 100644 index 00000000..e69de29b diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_residency_create.html b/app/themes/vertigo_starts_eu/templates/projects/project_residency_create.html new file mode 100644 index 00000000..ea2ae62c --- /dev/null +++ b/app/themes/vertigo_starts_eu/templates/projects/project_residency_create.html @@ -0,0 +1,50 @@ +{% extends "vertigo_starts_eu/pages/page.html" %} +{% load mezzanine_tags keyword_tags i18n organization_tags pages_tags %} + +{% block meta_title %}{% endblock %} + +{% block meta_keywords %}{% endblock %} + +{% block body_class %} + pattern pattern-bg {{ department.pages.all.0.weaving_css_class }} +{% endblock %} + +{% block breadcrumb_menu %} + {{ block.super }} + +{% endblock %} + +{% block page_tags %} +{% endblock %} + +{% block page_title %} + {% editable object.title %} +

{% trans "New residency form" %}

+ {% endeditable %} +{% endblock %} + +{% block page_content %} +
+ {% errors_for form %} +
+ {% fields_for form %} + {% for formset in inlines %} + {{ formset.management_form }} + {% for form in formset %} + {% fields_for form %} + {% endfor %} + {% endfor %} +
+ +
+
+
+{% endblock %} + +{% block extra_js %} +{{ block.super }} + +{% endblock %} diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_residency_detail.html b/app/themes/vertigo_starts_eu/templates/projects/project_residency_detail.html new file mode 100644 index 00000000..e69de29b diff --git a/app/themes/vertigo_starts_eu/templates/projects/project_residency_list.html b/app/themes/vertigo_starts_eu/templates/projects/project_residency_list.html new file mode 100644 index 00000000..e69de29b diff --git a/var b/var index 595000c5..6bc517e8 160000 --- a/var +++ b/var @@ -1 +1 @@ -Subproject commit 595000c55f1205bced7a836d309be26303da1509 +Subproject commit 6bc517e8659de1d64d09f3a190e97a7e4c4abe5f -- 2.39.5