diff --git a/config/install/medium_posts.settings.yml b/config/install/medium_posts.settings.yml index c316949..24b6250 100644 --- a/config/install/medium_posts.settings.yml +++ b/config/install/medium_posts.settings.yml @@ -3,3 +3,5 @@ publish_status: public push_on_node_publish: 1 push_on_workbench_moderation_status: 0 workbench_moderation_publish_status: '' +push_to_publication: 0 +publication_id: '' diff --git a/src/Form/MediumPostsSettingsForm.php b/src/Form/MediumPostsSettingsForm.php index 297a6c1..a0ab034 100644 --- a/src/Form/MediumPostsSettingsForm.php +++ b/src/Form/MediumPostsSettingsForm.php @@ -12,6 +12,16 @@ use Drupal\node\Entity\NodeType; class MediumPostsSettingsForm extends ConfigFormBase { /** + * Push to publication constant. + */ + const MEDIUM_POSTS_POST_TO_PUBLICATION = 'push_to_publication'; + + /** + * Publication ID constant. + */ + const MEDIUM_POSTS_PUBLICATION_ID = 'publication_id'; + + /** * {@inheritdoc} */ public function getFormId() { @@ -41,6 +51,31 @@ class MediumPostsSettingsForm extends ConfigFormBase { '#description' => $this->t('Select the content type used for medium publishing.
Medium publish uses title, body and field_tags three fields so please make sure the content type have those fields.'), ]; + $form[self::MEDIUM_POSTS_POST_TO_PUBLICATION] = [ + '#type' => 'checkbox', + '#title' => $this->t('Push to a Medium publication'), + '#default_value' => $config->get(self::MEDIUM_POSTS_POST_TO_PUBLICATION), + '#description' => $this->t('Additionally push content to a Medium publication: each user creating content in Drupal must have permission to create content under the specified publication on Medium.'), + '#attributes' => [ + 'name' => self::MEDIUM_POSTS_POST_TO_PUBLICATION, + ], + ]; + + $form[self::MEDIUM_POSTS_PUBLICATION_ID] = [ + '#type' => 'textfield', + '#title' => $this->t('Medium publication ID'), + '#default_value' => $config->get(self::MEDIUM_POSTS_PUBLICATION_ID), + '#description' => $this->t('Enter the Medium publication ID that you want to push content to.'), + '#attributes' => [ + 'name' => self::MEDIUM_POSTS_PUBLICATION_ID, + ], + '#states' => [ + 'visible' => [ + ':input[name="'. self::MEDIUM_POSTS_POST_TO_PUBLICATION . '"]' => ['checked' => TRUE], + ], + ], + ]; + $form['publish_status'] = [ '#type' => 'select', '#title' => $this->t('Publish status on Medium.com'), @@ -103,6 +138,9 @@ class MediumPostsSettingsForm extends ConfigFormBase { $config->set('node_type', $form_state->getValue('node_type')); $config->set('publish_status', $form_state->getValue('publish_status')); $config->set('push_on_node_publish', $form_state->getValue('push_on_node_publish')); + $config->set(self::MEDIUM_POSTS_POST_TO_PUBLICATION, $form_state->getValue(self::MEDIUM_POSTS_POST_TO_PUBLICATION)); + $publication_name = $form_state->getValue(self::MEDIUM_POSTS_POST_TO_PUBLICATION) ? $form_state->getValue(self::MEDIUM_POSTS_PUBLICATION_ID) : ''; + $config->set(self::MEDIUM_POSTS_PUBLICATION_ID, $publication_name); if (\Drupal::moduleHandler()->moduleExists('workbench_moderation')) { $config->set('push_on_workbench_moderation_status', $form_state->getValue('push_on_workbench_moderation_status')); diff --git a/src/MediumPostsManager.php b/src/MediumPostsManager.php index d181438..74932f1 100644 --- a/src/MediumPostsManager.php +++ b/src/MediumPostsManager.php @@ -69,6 +69,20 @@ class MediumPostsManager implements MediumPostsManagerInterface { protected $nodeType; /** + * Whether the module is configured to push to a Medium publication or not. + * + * @var bool + */ + protected $pushToPublication; + + /** + * The Medium publication ID to push to. + * + * @var string + */ + protected $publicationId; + + /** * MediumPostsManager constructor. * * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory @@ -90,6 +104,8 @@ class MediumPostsManager implements MediumPostsManagerInterface { $this->eventDispatcher = $event_dispatcher; $this->mediumSettings = $this->configFactory->get('medium_posts.settings'); $this->nodeType = $this->mediumSettings->get('node_type'); + $this->pushToPublication = $this->mediumSettings->get('push_to_publication'); + $this->publicationId = $this->mediumSettings->get('publication_id'); } /** @@ -162,7 +178,12 @@ class MediumPostsManager implements MediumPostsManagerInterface { throw new Exception($error->message); } - $post = $medium->createPost($user->data->id, $data); + if ($this->pushToPublication) { + $post = $medium->createPostUnderPublication($this->publicationId, $data); + } + else { + $post = $medium->createPost($user->data->id, $data); + } if (isset($post->data)) { $this->log($node->uuid(), $post->data);