fb_instant_articles_api.module in Facebook Instant Articles 3.x
Hook implementations.
File
modules/fb_instant_articles_api/fb_instant_articles_api.moduleView source
<?php
/**
* @file
* Hook implementations.
*/
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\fb_instant_articles\Form\EntityViewDisplayEditForm;
use Facebook\InstantArticles\Client\InstantArticleStatus;
use Drupal\fb_instant_articles\MissingApiCredentialsException;
use Drupal\Core\Url;
/**
* Implements hook_entity_insert().
*/
function fb_instant_articles_api_entity_insert(EntityInterface $entity) {
fb_instant_articles_api_entity_save($entity);
}
/**
* Implements hook_entity_update().
*/
function fb_instant_articles_api_entity_update(EntityInterface $entity) {
fb_instant_articles_api_entity_save($entity);
}
/**
* Save the given entity to Instant Articles via the API.
*
* When an entity is inserted or updated, import the content into Instant
* Articles via the API.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* Entity to import into Instant Articles. In practice we only send content
* entities.
*/
function fb_instant_articles_api_entity_save(EntityInterface $entity) {
// We're only interested in content entities.
if (!$entity instanceof ContentEntityInterface) {
return;
}
// Only attempt import if this entity is of a bundle that is enabled for
// instant articles.
$display_id = $entity
->getEntityTypeId() . '.' . $entity
->bundle() . '.' . EntityViewDisplayEditForm::FBIA_VIEW_MODE;
if (\Drupal::entityTypeManager()
->getStorage('entity_view_display')
->load($display_id)) {
try {
/** @var \Drupal\fb_instant_articles\DrupalClient $client */
$client = \Drupal::service('fb_instant_articles.drupal_client');
$client
->importEntity($entity);
\Drupal::messenger()
->addStatus(t('%label published to Facebook Instant Articles.', [
'%label' => $entity
->label(),
]));
} catch (MissingApiCredentialsException $e) {
\Drupal::messenger()
->addError(t('Error while trying to send entity to Facebook. API credentials haven\'t been configured. Visit the <a href="@api_config">Facebook Instant Articles API configuration page</a> to setup API access.', [
'@api_config' => Url::fromRoute('fb_instant_articles.api_settings_form')
->toString(),
]));
}
}
}
/**
* Implements hook_entity_delete().
*/
function fb_instant_articles_api_entity_delete(EntityInterface $entity) {
// We're only interested in content entities.
if (!$entity instanceof ContentEntityInterface) {
return;
}
// Only attempt delete if this entity is of a bundle that is enabled for
// instant articles.
$display_id = $entity
->getEntityTypeId() . '.' . $entity
->bundle() . '.' . EntityViewDisplayEditForm::FBIA_VIEW_MODE;
if (\Drupal::entityTypeManager()
->getStorage('entity_view_display')
->load($display_id)) {
try {
/** @var \Drupal\fb_instant_articles\DrupalClient $client */
$client = \Drupal::service('fb_instant_articles.drupal_client');
$status = $client
->removeEntity($entity);
if ($status
->getStatus() === InstantArticleStatus::SUCCESS) {
\Drupal::messenger()
->addStatus(t('%label deleted from Facebook Instant Articles.', [
'%label' => $entity
->label(),
]));
}
} catch (MissingApiCredentialsException $e) {
\Drupal::messenger()
->addError(t('Error while attempting to remove entity from Facebook Instant Articles. API credentials haven\'t been configured. Visit the <a href="@api_config">Facebook Instant Articles API configuration page</a> to setup API access.', [
'@api_config' => Url::fromRoute('fb_instant_articles.api_settings_form')
->toString(),
]));
}
}
}
Functions
Name | Description |
---|---|
fb_instant_articles_api_entity_delete | Implements hook_entity_delete(). |
fb_instant_articles_api_entity_insert | Implements hook_entity_insert(). |
fb_instant_articles_api_entity_save | Save the given entity to Instant Articles via the API. |
fb_instant_articles_api_entity_update | Implements hook_entity_update(). |