From 913fac1a293d8705d0ad2fb615be3eef7365ee05 Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Fri, 3 Aug 2018 11:45:28 +0100 Subject: [PATCH] Add the RFPs to the homepage --- .../migrations/0010_add_rfp_to_homepage.py | 48 +++++++++++++++++++ opentech/public/home/models.py | 25 +++++++++- .../public/home/templates/home/home_page.html | 2 + .../templates/home/includes/list_block.html | 32 +++++++------ 4 files changed, 92 insertions(+), 15 deletions(-) create mode 100644 opentech/public/home/migrations/0010_add_rfp_to_homepage.py diff --git a/opentech/public/home/migrations/0010_add_rfp_to_homepage.py b/opentech/public/home/migrations/0010_add_rfp_to_homepage.py new file mode 100644 index 000000000..55e83b1bd --- /dev/null +++ b/opentech/public/home/migrations/0010_add_rfp_to_homepage.py @@ -0,0 +1,48 @@ +# Generated by Django 2.0.2 on 2018-08-03 10:44 + +from django.db import migrations, models +import django.db.models.deletion +import modelcluster.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailcore', '0040_page_draft_title'), + ('home', '0009_django2_update'), + ] + + operations = [ + migrations.CreateModel( + name='PromotedRFPs', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), + ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailcore.Page')), + ], + options={ + 'ordering': ['sort_order'], + 'abstract': False, + }, + ), + migrations.AddField( + model_name='homepage', + name='rfps_intro', + field=models.TextField(blank=True), + ), + migrations.AddField( + model_name='homepage', + name='rfps_title', + field=models.CharField(default='Requests For Partners', max_length=255), + preserve_default=False, + ), + migrations.AddField( + model_name='promotedrfps', + name='source_page', + field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='promoted_rfps', to='home.HomePage'), + ), + migrations.AlterUniqueTogether( + name='promotedrfps', + unique_together={('page',)}, + ), + ] diff --git a/opentech/public/home/models.py b/opentech/public/home/models.py index 5918dd877..22e452eeb 100644 --- a/opentech/public/home/models.py +++ b/opentech/public/home/models.py @@ -9,7 +9,7 @@ from wagtail.search import index from opentech.public.utils.models import BasePage, RelatedPage -from opentech.public.funds.models import FundPage, LabPage +from opentech.public.funds.models import FundPage, LabPage, RFPPage from .blocks import OurWorkBlock @@ -42,6 +42,20 @@ class PromotedLabs(RelatedPage): ] +class PromotedRFPs(RelatedPage): + source_page = ParentalKey( + 'home.HomePage', + related_name='promoted_rfps' + ) + + class Meta(RelatedPage.Meta): + unique_together = ('page',) + + panels = [ + PageChooserPanel('page', 'public_funds.RFPPage'), + ] + + class HomePage(BasePage): # Only allow creating HomePages at the root level parent_page_types = ['wagtailcore.Page'] @@ -69,6 +83,9 @@ class HomePage(BasePage): labs_link = models.ForeignKey('wagtailcore.Page', related_name='+', on_delete=models.PROTECT) labs_link_text = models.CharField(max_length=255) + rfps_title = models.CharField(max_length=255) + rfps_intro = models.TextField(blank=True) + search_fields = BasePage.search_fields + [ index.SearchField('strapline'), ] @@ -99,6 +116,11 @@ class HomePage(BasePage): PageChooserPanel('labs_link'), FieldPanel('labs_link_text'), ], heading='Labs'), + MultiFieldPanel([ + FieldPanel('rfps_title'), + FieldPanel('rfps_intro'), + InlinePanel('promoted_rfps', label='Promoted RFPs', max_num=NUM_RELATED), + ], heading='Labs'), ] def get_related(self, page_type, base_list): @@ -125,4 +147,5 @@ class HomePage(BasePage): context = super().get_context(*args, **kwargs) context['lab_list'] = self.get_related(LabPage, self.promoted_labs) context['fund_list'] = self.get_related(FundPage, self.promoted_funds) + context['rfps_list'] = self.get_related(RFPPage, self.promoted_rfps) return context diff --git a/opentech/public/home/templates/home/home_page.html b/opentech/public/home/templates/home/home_page.html index 2a6250543..1b66674fd 100644 --- a/opentech/public/home/templates/home/home_page.html +++ b/opentech/public/home/templates/home/home_page.html @@ -101,4 +101,6 @@ {% include "home/includes/list_block.html" with bg_color="light-grey" arrow_color="blue" card_modifier="card--lab" title=page.labs_title intro=page.labs_intro link=page.labs_link link_text=page.labs_link_text listing=lab_list %} + {% include "home/includes/list_block.html" with bg_color="dark" arrow_color="white" title=page.rfps_title intro=page.rfps_intro listing=rfps_list %} + {% endblock %} diff --git a/opentech/public/home/templates/home/includes/list_block.html b/opentech/public/home/templates/home/includes/list_block.html index e4feeb284..2ba03c9ce 100644 --- a/opentech/public/home/templates/home/includes/list_block.html +++ b/opentech/public/home/templates/home/includes/list_block.html @@ -6,12 +6,14 @@ <h2>{{ title }}</h2> <p>{{ intro }}</p> </div> - <div class="show-tablet"> - <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}"> - {{ link_text }} - <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg> - </a> - </div> + {% if link_text and link %} + <div class="show-tablet"> + <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}"> + {{ link_text }} + <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg> + </a> + </div> + {% endif %} </section> <section class="grid grid--max-three"> @@ -36,13 +38,15 @@ </a> {% endfor %} </section> - <div class="wrapper wrapper--center show-mobile"> - <h5 class="heading heading--contains-link"> - <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}"> - {{ link_text }} - <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg> - </a> - </h5> - </div> + {% if link_text and link %} + <div class="wrapper wrapper--center show-mobile"> + <h5 class="heading heading--contains-link"> + <a class="link link--arrow-pixels-{{ arrow_color }}" href="{% pageurl link %}"> + {{ link_text }} + <svg><use xlink:href="#arrow-head-pixels--solid"></use></svg> + </a> + </h5> + </div> + {% endif %} </div> </div> -- GitLab