fb_instant_articles-8.x-2.2/modules/fb_instant_articles_api/fb_instant_articles_api.module

modules/fb_instant_articles_api/fb_instant_articles_api.module
<?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()]));
    }
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc