diff --git a/config/default/core.entity_form_display.node.post.default.yml b/config/default/core.entity_form_display.node.post.default.yml index cae82ea..99bc3fc 100644 --- a/config/default/core.entity_form_display.node.post.default.yml +++ b/config/default/core.entity_form_display.node.post.default.yml @@ -7,6 +7,7 @@ dependencies: - field.field.node.post.field_excerpt - field.field.node.post.field_has_tweet - field.field.node.post.field_images + - field.field.node.post.field_sent_to_social_media - field.field.node.post.field_series - field.field.node.post.field_tags - node.type.post @@ -127,4 +128,5 @@ content: region: content settings: { } third_party_settings: { } -hidden: { } +hidden: + field_sent_to_social_media: true diff --git a/config/default/core.entity_view_display.node.post.default.yml b/config/default/core.entity_view_display.node.post.default.yml index 4aa2564..bad63da 100644 --- a/config/default/core.entity_view_display.node.post.default.yml +++ b/config/default/core.entity_view_display.node.post.default.yml @@ -7,6 +7,7 @@ dependencies: - field.field.node.post.field_excerpt - field.field.node.post.field_has_tweet - field.field.node.post.field_images + - field.field.node.post.field_sent_to_social_media - field.field.node.post.field_series - field.field.node.post.field_tags - node.type.post @@ -25,6 +26,16 @@ content: settings: { } third_party_settings: { } region: content + field_sent_to_social_media: + weight: 3 + label: above + settings: + format: default + format_custom_false: '' + format_custom_true: '' + third_party_settings: { } + type: boolean + region: content field_tags: weight: 2 label: above diff --git a/config/default/core.entity_view_display.node.post.teaser.yml b/config/default/core.entity_view_display.node.post.teaser.yml index dfd5af7..6c4f01b 100644 --- a/config/default/core.entity_view_display.node.post.teaser.yml +++ b/config/default/core.entity_view_display.node.post.teaser.yml @@ -8,6 +8,7 @@ dependencies: - field.field.node.post.field_excerpt - field.field.node.post.field_has_tweet - field.field.node.post.field_images + - field.field.node.post.field_sent_to_social_media - field.field.node.post.field_series - field.field.node.post.field_tags - node.type.post @@ -34,5 +35,6 @@ hidden: body: true field_has_tweet: true field_images: true + field_sent_to_social_media: true field_series: true field_tags: true diff --git a/config/default/field.field.node.post.field_sent_to_social_media.yml b/config/default/field.field.node.post.field_sent_to_social_media.yml new file mode 100644 index 0000000..99c5811 --- /dev/null +++ b/config/default/field.field.node.post.field_sent_to_social_media.yml @@ -0,0 +1,23 @@ +uuid: 4f639dd0-6634-43ea-89a8-141dfde87059 +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_sent_to_social_media + - node.type.post +id: node.post.field_sent_to_social_media +field_name: field_sent_to_social_media +entity_type: node +bundle: post +label: 'Sent to social media' +description: '' +required: false +translatable: false +default_value: + - + value: 0 +default_value_callback: '' +settings: + on_label: 'On' + off_label: 'Off' +field_type: boolean diff --git a/config/default/field.storage.node.field_sent_to_social_media.yml b/config/default/field.storage.node.field_sent_to_social_media.yml new file mode 100644 index 0000000..ec314a3 --- /dev/null +++ b/config/default/field.storage.node.field_sent_to_social_media.yml @@ -0,0 +1,18 @@ +uuid: 2fead662-4d91-4788-b739-8e1a56d236af +langcode: en +status: true +dependencies: + module: + - node +id: node.field_sent_to_social_media +field_name: field_sent_to_social_media +entity_type: node +type: boolean +settings: { } +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/web/modules/custom/custom/custom.install b/web/modules/custom/custom/custom.install new file mode 100644 index 0000000..7965eb7 --- /dev/null +++ b/web/modules/custom/custom/custom.install @@ -0,0 +1,17 @@ +getAll(); + + foreach ($posts as $post) { + $post->set('field_sent_to_social_media', TRUE); + $post->save(); + } +} diff --git a/web/modules/custom/custom/custom.services.yml b/web/modules/custom/custom/custom.services.yml index c553e28..21c4bb3 100644 --- a/web/modules/custom/custom/custom.services.yml +++ b/web/modules/custom/custom/custom.services.yml @@ -7,5 +7,8 @@ services: tags: - { name: event_subscriber } + Drupal\custom\Repository\PostRepository: + autowire: true + Drupal\custom\Service\TalkCounter: autowire: true diff --git a/web/modules/custom/custom/src/Entity/Node/Post.php b/web/modules/custom/custom/src/Entity/Node/Post.php index 30427a3..4f33f9b 100644 --- a/web/modules/custom/custom/src/Entity/Node/Post.php +++ b/web/modules/custom/custom/src/Entity/Node/Post.php @@ -18,6 +18,10 @@ use Drupal\node\Entity\Node; */ class Post extends Node implements ContentEntityBundleInterface { + public function hasBeenSentToSocialMedia(): bool { + return (bool) $this->get('field_sent_to_social_media')->getString(); + } + public function hasTweet(): bool { return (bool) $this->get('field_has_tweet')->getString(); } diff --git a/web/modules/custom/custom/src/EventSubscriber/PushBlogPostToSocialMedia.php b/web/modules/custom/custom/src/EventSubscriber/PushBlogPostToSocialMedia.php index 89e72fc..ae1e908 100644 --- a/web/modules/custom/custom/src/EventSubscriber/PushBlogPostToSocialMedia.php +++ b/web/modules/custom/custom/src/EventSubscriber/PushBlogPostToSocialMedia.php @@ -37,7 +37,10 @@ final class PushBlogPostToSocialMedia implements EventSubscriberInterface { return; } - // TODO: Check that the post has not already been pushed. + // If this post has already been sent to social media, do not send it again. + if ($entity->hasBeenSentToSocialMedia()) { + return; + } $url = \Drupal::configFactory()->get('opdavies_talks.config') ->get('zapier_post_tweet_url'); @@ -47,6 +50,8 @@ final class PushBlogPostToSocialMedia implements EventSubscriberInterface { 'message' => $entity->toTweet(), ], ]); + + $entity->set('field_sent_to_social_media', TRUE); } } diff --git a/web/modules/custom/custom/src/Repository/PostRepository.php b/web/modules/custom/custom/src/Repository/PostRepository.php new file mode 100644 index 0000000..809c9ae --- /dev/null +++ b/web/modules/custom/custom/src/Repository/PostRepository.php @@ -0,0 +1,27 @@ +nodeStorage = $entityTypeManager->getStorage('node'); + } + + public function getAll(): Collection { + return new Collection( + $this->nodeStorage->loadByProperties([ + 'type' => 'post', + ]) + ); + } + +}