You are here

class DrupalApplication in CMS Content Sync 2.0.x

Same name and namespace in other branches
  1. 8 src/SyncCoreInterface/DrupalApplication.php \Drupal\cms_content_sync\SyncCoreInterface\DrupalApplication
  2. 2.1.x src/SyncCoreInterface/DrupalApplication.php \Drupal\cms_content_sync\SyncCoreInterface\DrupalApplication

Class DrupalApplication.

Implement the ApplicationInterface to provide basic information about this site to the Sync Core. Must be provided to all client instances to communicate with the Sync Core.

Hierarchy

  • class \Drupal\cms_content_sync\SyncCoreInterface\DrupalApplication implements \EdgeBox\SyncCore\Interfaces\IApplicationInterface

Expanded class hierarchy of DrupalApplication

4 files declare their use of DrupalApplication
Embed.php in src/Controller/Embed.php
EntityResource.php in src/Plugin/rest/resource/EntityResource.php
ManualPull.php in src/Controller/ManualPull.php
SyncHealth.php in modules/cms_content_sync_health/src/Controller/SyncHealth.php

File

src/SyncCoreInterface/DrupalApplication.php, line 17

Namespace

Drupal\cms_content_sync\SyncCoreInterface
View source
class DrupalApplication implements IApplicationInterface {

  /**
   * @var string APPLICATION_ID Unique ID to identify the kind of application
   */
  public const APPLICATION_ID = 'drupal';

  /**
   * @var \DrupalApplication
   */
  protected static $instance;

  /**
   * @return \DrupalApplication
   */
  public static function get() {
    if (!empty(self::$instance)) {
      return self::$instance;
    }
    return self::$instance = new DrupalApplication();
  }

  /**
   * {@inheritdoc}
   */
  public function getSiteBaseUrl() {
    return ContentSyncSettings::getInstance()
      ->getSiteBaseUrl();
  }

  /**
   * {@inheritdoc}
   */
  public function getAuthentication() {
    $type = ContentSyncSettings::getInstance()
      ->getAuthenticationType();
    $authentication_provider = AuthenticationByUser::getInstance();
    return [
      'type' => $type,
      'username' => $authentication_provider
        ->getUsername(),
      'password' => $authentication_provider
        ->getPassword(),
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getRelativeReferenceForRestCall(string $flow_machine_name, string $action) {
    $url = '/rest/cms-content-sync/v2/' . $flow_machine_name;
    if (IApplicationInterface::REST_ACTION_LIST_ENTITIES !== $action) {
      $url .= '/[type.namespaceMachineName]/[type.machineName]';

      // When retrieving the entity we require the UUID as we're only saving
      // the UUID at status entities.
      $url .= IApplicationInterface::REST_ACTION_RETRIEVE_ENTITY === $action ? '/[entity.uuid]' : '/[entity.sharedId]';
    }
    $url .= '?_format=json';
    return $url;
  }

  /**
   * {@inheritdoc}
   */
  public function getEmbedBaseUrl(string $feature) {
    $export_url = $this
      ->getSiteBaseUrl();
    $name = IEmbedService::REGISTER_SITE === $feature || IEmbedService::SITE_REGISTERED === $feature || IEmbedService::MIGRATE === $feature ? 'site' : $feature;
    $url = sprintf('%s/admin/config/services/cms_content_sync/%s', $export_url, $name);

    // If something went wrong and the site needs to be re-registered again forcefully, we add a "force" param.
    if (IEmbedService::REGISTER_SITE === $feature) {
      $url .= '?force=' . IEmbedService::REGISTER_SITE;
    }
    elseif (IEmbedService::MIGRATE === $feature) {
      $url .= '?force=' . IEmbedService::MIGRATE;
    }
    return $url;
  }

  /**
   * {@inheritDoc}
   */
  public function setSyncCoreUrl(string $set) {
    ContentSyncSettings::getInstance()
      ->setSyncCoreUrl($set);
  }

  /**
   * {@inheritDoc}
   */
  public function getSyncCoreUrl() {
    return ContentSyncSettings::getInstance()
      ->getSyncCoreUrl();
  }

  /**
   * {@inheritdoc}
   */
  public function getRestUrl($pool_id, $type_machine_name, $bundle_machine_name, $version_id, $entity_uuid = null, $manually = null, $as_dependency = null) {
    $export_url = $this
      ->getSiteBaseUrl();
    $url = sprintf('%s/rest/cms-content-sync/%s/%s/%s/%s', $export_url, $pool_id, $type_machine_name, $bundle_machine_name, $version_id);
    if ($entity_uuid) {
      $url .= '/' . $entity_uuid;
    }
    $url .= '?_format=json';
    if ($as_dependency) {
      $url .= '&is_dependency=' . $as_dependency;
    }
    if ($manually) {
      $url .= '&is_manual=' . $manually;
    }
    return $url;
  }

  /**
   * {@inheritdoc}
   */
  public function getSiteName() {
    $name = getenv('CONTENT_SYNC_SITE_NAME');
    if ($name) {
      return $name;
    }
    try {
      return ContentSyncSettings::getInstance()
        ->getSiteName();
    } catch (\Exception $e) {
      return \Drupal::config('system.site')
        ->get('name');
    }
  }

  /**
   * {@inheritdoc}
   */
  public function setSiteId($set) {
    ContentSyncSettings::getInstance()
      ->setSiteId($set);
  }

  /**
   * {@inheritdoc}
   */
  public function getSiteId() {
    return ContentSyncSettings::getInstance()
      ->getSiteMachineName();
  }

  /**
   * {@inheritdoc}
   */
  public function getSiteMachineName() {
    return ContentSyncSettings::getInstance()
      ->getSiteMachineName();
  }

  /**
   * {@inheritdoc}
   */
  public function setSiteMachineName($set) {
    ContentSyncSettings::getInstance()
      ->setSiteMachineName($set);
  }

  /**
   * {@inheritdoc}
   */
  public function setSiteUuid(string $set) {
    ContentSyncSettings::getInstance()
      ->setSiteUuid($set);

    // Clear some caches to set the local action buttons to active.
    // @ToDo: Adjust this to just clear the cache tags for the local actions.
    $bins = Cache::getBins();
    $bins['render']
      ->deleteAll();
    $bins['discovery']
      ->deleteAll();
  }

  /**
   * {@inheritdoc}
   */
  public function getSiteUuid() {
    return ContentSyncSettings::getInstance()
      ->getSiteUuid();
  }

  /**
   * {@inheritdoc}
   */
  public function getApplicationId() {
    return self::APPLICATION_ID;
  }

  /**
   * {@inheritdoc}
   */
  public function getApplicationVersion() {
    return \Drupal::VERSION;
  }

  /**
   * {@inheritdoc}
   */
  public function getApplicationModuleVersion() {
    $version = \Drupal::service('extension.list.module')
      ->getExtensionInfo('cms_content_sync')['version'];
    return $version ? $version : 'dev';
  }

  /**
   * {@inheritdoc}
   */
  public function getHttpClient() {
    return \Drupal::httpClient();
  }

  /**
   * {@inheritdoc}
   */
  public function getHttpOptions() {
    $options = [];

    // Allow to set a custom timeout for Sync Core requests.
    global $config;
    $config_name = 'cms_content_sync.sync_core_request_timeout';
    if (!empty($config[$config_name]) && is_int($config[$config_name])) {
      $options['timeout'] = $config[$config_name];
    }
    return $options;
  }
  const FEATURE_COUNT_ENTITIES = 'count-entities';
  public function getFeatureFlags() {
    return [
      self::FEATURE_COUNT_ENTITIES => 1,
    ];
  }

}

Members