Fix the ordering for future talks

Rather than the custom event sorting plugin being based on the `created`
value, this change adds a new `field_event_date` field to the talk node
type and uses this for the sorting instead.

This commit also adds a new `TalkDateUpdater` service that extracts
either the next event date if there is a future date, or the last past
event date if there is no future date, from `field_events` for each talk
and saves it into the event date field.

For consistency, and to ensure that the results are ordered correctly,
the talk date updater converts the date from a date string (e.g.
`2020-08-24`) into a UNIX timestamp, and the timestamp is saved in the
event date field. This can be changed at a later date if needed.

The talks view has been updated to use the updated sort plugin, and the
existing tests have been updated to use the new field.

References #204
This commit is contained in:
Oliver Davies 2020-08-24 02:00:22 +01:00
parent bdf225b05d
commit 6d9ecd8df0
17 changed files with 340 additions and 21 deletions

View file

@ -4,6 +4,7 @@ status: true
dependencies:
config:
- field.field.node.talk.body
- field.field.node.talk.field_event_date
- field.field.node.talk.field_events
- field.field.node.talk.field_excerpt
- field.field.node.talk.field_slides
@ -143,4 +144,5 @@ content:
region: content
settings: { }
third_party_settings: { }
hidden: { }
hidden:
field_event_date: true

View file

@ -4,6 +4,7 @@ status: true
dependencies:
config:
- field.field.node.talk.body
- field.field.node.talk.field_event_date
- field.field.node.talk.field_events
- field.field.node.talk.field_excerpt
- field.field.node.talk.field_slides
@ -66,4 +67,5 @@ content:
settings: { }
third_party_settings: { }
hidden:
field_event_date: true
field_excerpt: true

View file

@ -5,6 +5,7 @@ dependencies:
config:
- core.entity_view_mode.node.teaser
- field.field.node.talk.body
- field.field.node.talk.field_event_date
- field.field.node.talk.field_events
- field.field.node.talk.field_excerpt
- field.field.node.talk.field_slides
@ -32,6 +33,7 @@ content:
third_party_settings: { }
hidden:
body: true
field_event_date: true
field_events: true
field_slides: true
field_type: true

View file

@ -0,0 +1,23 @@
uuid: 5c54e34a-4e53-4e70-b621-1d40953385cd
langcode: en
status: true
dependencies:
config:
- field.storage.node.field_event_date
- node.type.talk
id: node.talk.field_event_date
field_name: field_event_date
entity_type: node
bundle: talk
label: 'Next event date'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
min: 0
max: null
prefix: ''
suffix: ''
field_type: integer

View file

@ -0,0 +1,20 @@
uuid: 86aec221-e3cb-4da3-90b5-522b661c6313
langcode: en
status: true
dependencies:
module:
- node
id: node.field_event_date
field_name: field_event_date
entity_type: node
type: integer
settings:
unsigned: false
size: normal
module: core
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false

View file

@ -144,7 +144,7 @@ display:
sorts:
event_sort:
id: event_sort
table: node_field_data
table: node__field_event_date
field: event_sort
relationship: none
group_type: group
@ -154,7 +154,6 @@ display:
expose:
label: ''
granularity: second
entity_type: node
plugin_id: event_sort
title: Talks
header: { }