Fix event sorting
Re-add `field_event_date` to sort the talks by their most recent event date in their custom order.
This commit is contained in:
parent
6eed26a756
commit
9a96363ff7
|
@ -4,6 +4,7 @@ status: true
|
||||||
dependencies:
|
dependencies:
|
||||||
config:
|
config:
|
||||||
- field.field.node.talk.body
|
- field.field.node.talk.body
|
||||||
|
- field.field.node.talk.field_event_date
|
||||||
- field.field.node.talk.field_events
|
- field.field.node.talk.field_events
|
||||||
- field.field.node.talk.field_slides
|
- field.field.node.talk.field_slides
|
||||||
- field.field.node.talk.field_video
|
- field.field.node.talk.field_video
|
||||||
|
@ -112,4 +113,5 @@ content:
|
||||||
region: content
|
region: content
|
||||||
settings: { }
|
settings: { }
|
||||||
third_party_settings: { }
|
third_party_settings: { }
|
||||||
hidden: { }
|
hidden:
|
||||||
|
field_event_date: true
|
||||||
|
|
|
@ -4,12 +4,14 @@ status: true
|
||||||
dependencies:
|
dependencies:
|
||||||
config:
|
config:
|
||||||
- field.field.node.talk.body
|
- field.field.node.talk.body
|
||||||
|
- field.field.node.talk.field_event_date
|
||||||
- field.field.node.talk.field_events
|
- field.field.node.talk.field_events
|
||||||
- field.field.node.talk.field_slides
|
- field.field.node.talk.field_slides
|
||||||
- field.field.node.talk.field_video
|
- field.field.node.talk.field_video
|
||||||
- node.type.talk
|
- node.type.talk
|
||||||
- views.view.events
|
- views.view.events
|
||||||
module:
|
module:
|
||||||
|
- datetime
|
||||||
- layout_builder
|
- layout_builder
|
||||||
- layout_discovery
|
- layout_discovery
|
||||||
- speakerdeck_field
|
- speakerdeck_field
|
||||||
|
@ -92,6 +94,23 @@ third_party_settings:
|
||||||
items_per_page: none
|
items_per_page: none
|
||||||
weight: 5
|
weight: 5
|
||||||
additional: { }
|
additional: { }
|
||||||
|
ccf9bc4e-e750-4762-901a-766292184cd7:
|
||||||
|
uuid: ccf9bc4e-e750-4762-901a-766292184cd7
|
||||||
|
region: content
|
||||||
|
configuration:
|
||||||
|
id: 'field_block:node:talk:field_event_date'
|
||||||
|
label_display: '0'
|
||||||
|
context_mapping:
|
||||||
|
entity: layout_builder.entity
|
||||||
|
formatter:
|
||||||
|
type: datetime_default
|
||||||
|
label: above
|
||||||
|
settings:
|
||||||
|
timezone_override: ''
|
||||||
|
format_type: medium
|
||||||
|
third_party_settings: { }
|
||||||
|
weight: 6
|
||||||
|
additional: { }
|
||||||
third_party_settings: { }
|
third_party_settings: { }
|
||||||
id: node.talk.default
|
id: node.talk.default
|
||||||
targetEntityType: node
|
targetEntityType: node
|
||||||
|
@ -105,6 +124,15 @@ content:
|
||||||
third_party_settings: { }
|
third_party_settings: { }
|
||||||
weight: 101
|
weight: 101
|
||||||
region: content
|
region: content
|
||||||
|
field_event_date:
|
||||||
|
type: datetime_default
|
||||||
|
label: above
|
||||||
|
settings:
|
||||||
|
timezone_override: ''
|
||||||
|
format_type: medium
|
||||||
|
third_party_settings: { }
|
||||||
|
weight: 105
|
||||||
|
region: content
|
||||||
field_events:
|
field_events:
|
||||||
type: entity_reference_entity_view
|
type: entity_reference_entity_view
|
||||||
label: above
|
label: above
|
||||||
|
|
|
@ -5,6 +5,7 @@ dependencies:
|
||||||
config:
|
config:
|
||||||
- core.entity_view_mode.node.teaser
|
- core.entity_view_mode.node.teaser
|
||||||
- field.field.node.talk.body
|
- field.field.node.talk.body
|
||||||
|
- field.field.node.talk.field_event_date
|
||||||
- field.field.node.talk.field_events
|
- field.field.node.talk.field_events
|
||||||
- field.field.node.talk.field_slides
|
- field.field.node.talk.field_slides
|
||||||
- field.field.node.talk.field_video
|
- field.field.node.talk.field_video
|
||||||
|
@ -26,6 +27,7 @@ content:
|
||||||
weight: 0
|
weight: 0
|
||||||
region: content
|
region: content
|
||||||
hidden:
|
hidden:
|
||||||
|
field_event_date: true
|
||||||
field_events: true
|
field_events: true
|
||||||
field_slides: true
|
field_slides: true
|
||||||
field_video: true
|
field_video: true
|
||||||
|
|
21
config/sync/field.field.node.talk.field_event_date.yml
Normal file
21
config/sync/field.field.node.talk.field_event_date.yml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
uuid: c4294337-cdd3-4279-ba3f-55b135ec2399
|
||||||
|
langcode: en
|
||||||
|
status: true
|
||||||
|
dependencies:
|
||||||
|
config:
|
||||||
|
- field.storage.node.field_event_date
|
||||||
|
- node.type.talk
|
||||||
|
module:
|
||||||
|
- datetime
|
||||||
|
id: node.talk.field_event_date
|
||||||
|
field_name: field_event_date
|
||||||
|
entity_type: node
|
||||||
|
bundle: talk
|
||||||
|
label: 'Event date'
|
||||||
|
description: ''
|
||||||
|
required: false
|
||||||
|
translatable: false
|
||||||
|
default_value: { }
|
||||||
|
default_value_callback: ''
|
||||||
|
settings: { }
|
||||||
|
field_type: datetime
|
20
config/sync/field.storage.node.field_event_date.yml
Normal file
20
config/sync/field.storage.node.field_event_date.yml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
uuid: 9e8d548e-b3a8-455e-b5e3-59eb7c56ca2e
|
||||||
|
langcode: en
|
||||||
|
status: true
|
||||||
|
dependencies:
|
||||||
|
module:
|
||||||
|
- datetime
|
||||||
|
- node
|
||||||
|
id: node.field_event_date
|
||||||
|
field_name: field_event_date
|
||||||
|
entity_type: node
|
||||||
|
type: datetime
|
||||||
|
settings:
|
||||||
|
datetime_type: date
|
||||||
|
module: datetime
|
||||||
|
locked: false
|
||||||
|
cardinality: 1
|
||||||
|
translatable: true
|
||||||
|
indexes: { }
|
||||||
|
persist_with_no_fields: false
|
||||||
|
custom_storage: false
|
|
@ -8,6 +8,7 @@ dependencies:
|
||||||
- system.menu.main
|
- system.menu.main
|
||||||
module:
|
module:
|
||||||
- node
|
- node
|
||||||
|
- opdavies_talks
|
||||||
- user
|
- user
|
||||||
id: talks
|
id: talks
|
||||||
label: 'Talks and workshops'
|
label: 'Talks and workshops'
|
||||||
|
@ -95,17 +96,15 @@ display:
|
||||||
options: { }
|
options: { }
|
||||||
empty: { }
|
empty: { }
|
||||||
sorts:
|
sorts:
|
||||||
created:
|
event_sort:
|
||||||
id: created
|
id: event_sort
|
||||||
table: node_field_data
|
table: node__field_events
|
||||||
field: created
|
field: event_sort
|
||||||
relationship: none
|
relationship: none
|
||||||
group_type: group
|
group_type: group
|
||||||
admin_label: ''
|
admin_label: ''
|
||||||
entity_type: node
|
plugin_id: event_sort
|
||||||
entity_field: created
|
order: ASC
|
||||||
plugin_id: date
|
|
||||||
order: DESC
|
|
||||||
expose:
|
expose:
|
||||||
label: ''
|
label: ''
|
||||||
field_identifier: ''
|
field_identifier: ''
|
||||||
|
|
|
@ -36,13 +36,11 @@ final class UpdateTalkNodeBeforeSave implements EventSubscriberInterface {
|
||||||
$talk = Talk::createFromNode($node);
|
$talk = Talk::createFromNode($node);
|
||||||
|
|
||||||
$this->reorderEvents($talk);
|
$this->reorderEvents($talk);
|
||||||
$this->updateCreatedDate($talk);
|
$this->updateMostRecentEventDate($talk);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function reorderEvents(Talk $talk): void {
|
private function reorderEvents(Talk $talk): void {
|
||||||
$events = $talk->getEvents();
|
$events = $talk->getEvents();
|
||||||
|
|
||||||
// If there is only one event, there's no need to sort them.
|
|
||||||
if ($events->count() === 1) {
|
if ($events->count() === 1) {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
@ -62,18 +60,10 @@ final class UpdateTalkNodeBeforeSave implements EventSubscriberInterface {
|
||||||
->values();
|
->values();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function updateCreatedDate(Talk $talk): void {
|
private function updateMostRecentEventDate(Talk $talk): void {
|
||||||
if (!$eventDate = $talk->findLatestEventDate()) {
|
$mostRecentEventDate = $talk->findLatestEventDate();
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$talkDate = Carbon::parse($eventDate)->getTimestamp();
|
$talk->set('field_event_date', $mostRecentEventDate);
|
||||||
|
|
||||||
if ($talkDate == $talk->getCreatedTime()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$talk->setCreatedTime($talkDate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue