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);