eventbrite_one_way_sync-1.0.0/src/EventbriteOneWaySyncPluginCollection.php

src/EventbriteOneWaySyncPluginCollection.php
<?php

namespace Drupal\eventbrite_one_way_sync;

use Drupal\eventbrite_one_way_sync\EventbriteEvent\EventbriteEventValidInterface;
use Drupal\eventbrite_one_way_sync\Utilities\DependencyInjection;

/**
 * Abstraction around a collection of plugins.
 */
class EventbriteOneWaySyncPluginCollection implements EventbriteOneWaySyncPluginInterface, \Countable {

  use DependencyInjection;

  /**
   * Get plugin objects.
   *
   * @param bool $reset
   *   Whether to re-fetch plugins; otherwise we use the static variable.
   *   This can be useful during testing.
   *
   * @return array
   *   Array of plugin objects.
   *
   * @throws \Exception
   */
  public function plugins(bool $reset = FALSE) : array {
    static $return = NULL;

    if ($return === NULL || $reset) {
      $return = [];
      foreach (array_keys($this->pluginDefinitions()) as $plugin_id) {
        $return[$plugin_id] = $this->byId($plugin_id);
      }
    }

    return $return;
  }

  /**
   * {@inheritdoc}
   */
  public function count() : int {
    return count($this->pluginDefinitions());
  }

  /**
   * Get plugin definitions based on their annotations.
   *
   * @return array
   *   Array of plugin definitions.
   *
   * @throws \Exception
   */
  public function pluginDefinitions() : array {
    $return = $this->pluginManager()->getDefinitions();

    uasort($return, function (array $a, array $b) : int {
      if ($a['weight'] == $b['weight']) {
          return 0;
      }
      return ($a['weight'] < $b['weight']) ? -1 : 1;
    });

    return $return;
  }

  /**
   * Get an array of example URLs for usage.
   *
   * @param string $base_url
   *   The base URL to use for the examples.
   * @param string $token
   *   A token which should be used for the examples.
   *
   * @return array
   *   Array of example URLs for usage.
   *
   * @throws \Exception
   */
  public function exampleUrls(string $base_url, string $token) : array {
    $return = [];

    foreach ($this->pluginDefinitions() as $pluginDefinition) {
      foreach ($pluginDefinition['examples'] as $example) {
        $return[] = str_replace('[url]', $base_url, str_replace('[token]', $token, $example));
      }
    }

    return $return;
  }

  /**
   * Get a single plugin by its id.
   *
   * @param string $plugin_id
   *   The plugin id.
   *
   * @return \Drupal\eventbrite_one_way_sync\EventbriteOneWaySyncPluginInterface
   *   The plugin.
   */
  public function byId(string $plugin_id) : EventbriteOneWaySyncPluginInterface {
    return $this->pluginManager()->createInstance($plugin_id, ['of' => 'configuration values']);
  }

  /**
   * {@inheritdoc}
   */
  public function process(EventbriteEventValidInterface $event) {
    foreach ($this->plugins() as $plugin) {
      $plugin->process($event);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function smokeTest(string $eventbrite_account_label) {
    foreach ($this->plugins() as $plugin) {
      $plugin->smokeTest($eventbrite_account_label);
    }
  }

}

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

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