You are here

abstract class ViewsDuplicateBuilderBase in Views Templates 8

ViewsDuplicateBuilderBase Class.

Hierarchy

Expanded class hierarchy of ViewsDuplicateBuilderBase

1 file declares its use of ViewsDuplicateBuilderBase
ViewDuplicatorTest.php in tests/modules/views_templates_builder_test/src/Plugin/ViewsTemplateBuilder/ViewDuplicatorTest.php

File

src/Plugin/ViewsDuplicateBuilderBase.php, line 15

Namespace

Drupal\views_templates\Plugin
View source
abstract class ViewsDuplicateBuilderBase extends ViewsBuilderBase implements ViewsDuplicateBuilderPluginInterface, ContainerFactoryPluginInterface {

  /**
   * The view template loader.
   *
   * @var \Drupal\views_templates\ViewsTemplateLoaderInterface
   */
  protected $templateLoader;

  /**
   * The loaded template.
   *
   * @var mixed
   */
  protected $loadedTemplate;

  /**
   * Constructor to the class ViewDuplicateBuilderBase.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, ViewsTemplateLoaderInterface $loader) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->templateLoader = $loader;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('views_templates.loader'));
  }

  /**
   * {@inheritdoc}
   */
  public function createView($options = NULL) {
    if ($view_template = $this
      ->loadTemplate($options)) {
      $view_template['id'] = $options['id'];
      $view_template['label'] = $options['label'];
      $view_template['description'] = $options['description'];
      return View::create($view_template);
    }
    return NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getViewTemplateId() {
    return $this
      ->getDefinitionValue('view_template_id');
  }

  /**
   * {@inheritdoc}
   */
  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getAdminLabel() {
    return $this
      ->loadViewsTemplateValue('label');
  }

  /**
   * {@inheritdoc}
   */
  public function getDescription() {
    return $this
      ->loadViewsTemplateValue('description');
  }

  /**
   * Return value from template.
   *
   * @param mixed $key
   *   The Key.
   * @param mixed $options
   *   The options.
   *
   * @return mixed|null
   *   Return the value or a null.
   */
  protected function loadViewsTemplateValue($key, $options = NULL) {
    $view_template = $this
      ->loadTemplate($options);
    if (isset($view_template[$key])) {
      return $view_template[$key];
    }
    return NULL;
  }

  /**
   * Load template from service.
   *
   * @param mixed $options
   *   The options to load template.
   *
   * @return object
   *   Returns loaded template in object form.
   */
  protected function loadTemplate($options) {
    if (empty($this->loadedTemplate)) {
      try {
        $template = $this->templateLoader
          ->load($this);
      } catch (FileNotFoundException $e) {
        watchdog_exception('views_templates', $e, $e
          ->getMessage());
        return NULL;
      }
      $this
        ->alterViewTemplateAfterCreation($template, $options);
      $this->loadedTemplate = $template;
    }
    return $this->loadedTemplate;
  }

  /**
   * After View Template has been created the Builder should alter it some how.
   *
   * @param array $view_template
   *   The array of view template.
   * @param array $options
   *   Options for altering.
   */
  protected function alterViewTemplateAfterCreation(array &$view_template, array $options = NULL) {
    if ($replacements = $this
      ->getReplacements($options)) {
      $this
        ->replaceTemplateKeyAndValues($view_template, $replacements, $options);
    }
  }

  /**
   * Get the replaces array from the plugin definition.
   *
   * The keys will be converted to work with yml files.
   *
   * @param mixed $options
   *   Options to get replacements.
   *
   * @return array
   *   Returns an array.
   */
  protected function getReplacements($options) {
    if ($replacements = $this
      ->getDefinitionValue('replacements')) {
      $converted_replacements = [];
      foreach ($replacements as $key => $value) {
        $new_key = '__' . strtoupper($key);
        $converted_replacements[$new_key] = $value;
      }
      return $converted_replacements;
    }
    return [];
  }

  /**
   * Recursively replace keys and values in template elements.
   *
   * For example of builder and yml template:
   *
   * @param array $template_elements
   *   Array of elements from a View Template array.
   * @param array $replace_values
   *   The values in that should be replaced in the template.
   *   The keys in this array can be keys OR values template array.
   *   This allows replacing both keys and values in the template.
   * @param mixed $options
   *   The options to replace template key and values.
   *
   * @see Drupal\views_templates_builder_test\Plugin\ViewsTemplateBuilder
   */
  protected function replaceTemplateKeyAndValues(array &$template_elements, array $replace_values, $options = NULL) {
    foreach ($template_elements as $key => &$value) {
      if (is_array($value)) {
        $this
          ->replaceTemplateKeyAndValues($value, $replace_values, $options);
      }
      foreach ($replace_values as $replace_key => $replace_value) {
        if (!is_array($value)) {
          if (is_string($value)) {
            if (stripos($value, $replace_key) !== FALSE) {
              $value = str_replace($replace_key, $replace_value, $value);
            }
          }
          elseif ($replace_key === $value) {
            $value = $replace_value;
          }
        }
        if (stripos($key, $replace_key) !== FALSE) {
          $new_key = str_replace($replace_key, $replace_value, $key);

          // NULL is used in replace value to remove keys from template.
          if ($replace_value !== NULL) {
            $template_elements[$new_key] = $value;
          }
          unset($template_elements[$key]);
        }
      }
    }
  }

  /**
   * Check if template exists.
   *
   * @return bool
   *   Returns a boolean value.
   */
  public function templateExists() {
    return $this
      ->loadTemplate([]) ? TRUE : FALSE;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
ViewsBuilderBase::getBaseTable public function Returns base table id. Overrides ViewsBuilderPluginInterface::getBaseTable
ViewsBuilderBase::getDefinitionValue public function Get a value from the plugin definition. Overrides ViewsBuilderPluginInterface::getDefinitionValue
ViewsDuplicateBuilderBase::$loadedTemplate protected property The loaded template.
ViewsDuplicateBuilderBase::$templateLoader protected property The view template loader.
ViewsDuplicateBuilderBase::alterViewTemplateAfterCreation protected function After View Template has been created the Builder should alter it some how. 1
ViewsDuplicateBuilderBase::buildConfigurationForm public function Return form elements of extra configuration when adding View from template. Overrides ViewsBuilderBase::buildConfigurationForm 1
ViewsDuplicateBuilderBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
ViewsDuplicateBuilderBase::createView public function Create a View. Don't save it. Overrides ViewsBuilderBase::createView
ViewsDuplicateBuilderBase::getAdminLabel public function Get template admin label. Overrides ViewsBuilderBase::getAdminLabel
ViewsDuplicateBuilderBase::getDescription public function Get template description. Overrides ViewsBuilderBase::getDescription
ViewsDuplicateBuilderBase::getReplacements protected function Get the replaces array from the plugin definition.
ViewsDuplicateBuilderBase::getViewTemplateId public function Return the View Template id to be used by this Plugin. Overrides ViewsDuplicateBuilderPluginInterface::getViewTemplateId
ViewsDuplicateBuilderBase::loadTemplate protected function Load template from service.
ViewsDuplicateBuilderBase::loadViewsTemplateValue protected function Return value from template.
ViewsDuplicateBuilderBase::replaceTemplateKeyAndValues protected function Recursively replace keys and values in template elements.
ViewsDuplicateBuilderBase::templateExists public function Check if template exists. Overrides ViewsBuilderBase::templateExists
ViewsDuplicateBuilderBase::__construct public function Constructor to the class ViewDuplicateBuilderBase. Overrides PluginBase::__construct