You are here

class SchemaNameBase in Schema.org Metatag 8

Same name and namespace in other branches
  1. 8.2 src/Plugin/metatag/Tag/SchemaNameBase.php \Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase

All Schema.org tags should extend this class.

Hierarchy

Expanded class hierarchy of SchemaNameBase

119 files declare their use of SchemaNameBase
SchemaArticleAbout.php in schema_article/src/Plugin/metatag/Tag/SchemaArticleAbout.php
SchemaArticleAgeRange.php in schema_article_example/src/Plugin/metatag/Tag/SchemaArticleAgeRange.php
SchemaArticleDescription.php in schema_article/src/Plugin/metatag/Tag/SchemaArticleDescription.php
SchemaArticleHeadline.php in schema_article/src/Plugin/metatag/Tag/SchemaArticleHeadline.php
SchemaArticleName.php in schema_article/src/Plugin/metatag/Tag/SchemaArticleName.php

... See full list

3 string references to 'SchemaNameBase'
SchemaActionTrait::actionProperties in src/Plugin/metatag/Tag/SchemaActionTrait.php
Return an array of the unique properties for an action type.
SchemaCreativeWorkTrait::creativeWorkProperties in src/Plugin/metatag/Tag/SchemaCreativeWorkTrait.php
Return an array of the unique properties for an object type.
SchemaHasPartTrait::hasPartProperties in src/Plugin/metatag/Tag/SchemaHasPartTrait.php
Return an array of the unique properties for an object type.

File

src/Plugin/metatag/Tag/SchemaNameBase.php, line 14

Namespace

Drupal\schema_metatag\Plugin\metatag\Tag
View source
class SchemaNameBase extends MetaNameBase implements SchemaMetatagTestTagInterface, ContainerFactoryPluginInterface {

  /**
   * The schemaMetatagManager service.
   *
   * @var \Drupal\schema_metatag\schemaMetatagManager
   */
  protected $schemaMetatagManager;

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

  /**
   * Sets schemaMetatagManager service.
   *
   * @param \Drupal\schema_metatag\SchemaMetatagManager $schemaMetatagManager
   *   The Schema Metatag Manager service.
   */
  public function setSchemaMetatagManager(SchemaMetatagManager $schemaMetatagManager) {
    $this->schemaMetatagManager = $schemaMetatagManager;
  }

  /**
   * Return the SchemaMetatagManager.
   *
   * @return \Drupal\schema_metatag\SchemaMetatagManager
   *   The Schema Metatag Manager service.
   */
  protected function schemaMetatagManager() {
    return $this->schemaMetatagManager;
  }

  /**
   * The #states base visibility selector for this element.
   */
  protected function visibilitySelector() {
    return $this
      ->getPluginId();
  }

  /**
   * {@inheritdoc}
   */
  public function output() {
    $value = $this
      ->schemaMetatagManager()
      ->unserialize($this
      ->value());

    // If this is a complex array of value, process the array.
    if (is_array($value)) {

      // Clean out empty values.
      $value = $this
        ->schemaMetatagManager()
        ->arrayTrim($value);
    }
    if (empty($value)) {
      return '';
    }
    elseif (is_array($value)) {

      // If the item is an array of values,
      // walk the array and process the values.
      array_walk_recursive($value, 'static::processItem');

      // Recursively pivot each branch of the array.
      $value = static::pivotItem($value);
    }
    else {
      $this
        ->processItem($value);
    }
    $output = [
      '#tag' => 'meta',
      '#attributes' => [
        'name' => $this->name,
        'content' => static::outputValue($value),
        'group' => $this->group,
        'schema_metatag' => TRUE,
      ],
    ];
    return $output;
  }

  /**
   * The serialized value for the metatag.
   *
   * Metatag expects a string value, so use the serialized value
   * without unserializing it. Manually unserialize it when needed.
   */
  public function value() {
    return $this->value;
  }

  /**
   * Metatag expects a string value, so serialize any array of values.
   */
  public function setValue($value) {
    $this->value = $this
      ->schemaMetatagManager()
      ->serialize($value);
  }

  /**
   * {@inheritdoc}
   */
  public static function pivotItem($array) {

    // See if any nested items need to be pivoted.
    // If pivot is set to 0, it would have been removed as an empty value.
    if (array_key_exists('pivot', $array)) {
      unset($array['pivot']);

      /** @var \Drupal\schema_metatag\SchemaMetatagManagerInterface $schemaMetatagManager */
      $schemaMetatagManager = \Drupal::service('schema_metatag.schema_metatag_manager');
      $array = $schemaMetatagManager
        ->pivot($array);
    }
    foreach ($array as &$value) {
      if (is_array($value)) {
        $value = static::pivotItem($value);
      }
    }
    return $array;
  }

  /**
   * Nested elements that cannot be exploded.
   *
   * @return array
   *   Array of keys that might contain commas, or otherwise cannot be exploded.
   */
  protected function neverExplode() {
    return [
      'streetAddress',
      'reviewBody',
      'recipeInstructions',
    ];
  }

  /**
   * {@inheritdoc}
   */
  protected function processItem(&$value, $key = 0) {
    $explode = $key === 0 ? $this
      ->multiple() : !in_array($key, $this
      ->neverExplode());

    // Parse out the image URL, if needed.
    $value = $this
      ->parseImageUrlValue($value, $explode);
    $value = trim($value);

    // If tag must be secure, convert all http:// to https://.
    if ($this
      ->secure() && strpos($value, 'http://') !== FALSE) {
      $value = str_replace('http://', 'https://', $value);
    }
    if ($explode) {
      $value = $this
        ->schemaMetatagManager()
        ->explode($value);

      // Clean out any empty values that might have been added by explode().
      if (is_array($value)) {
        $value = array_filter($value);
      }
    }
  }

  /**
   * Parse the image url out of image markup.
   *
   * A copy of the base method of the same name, but where $value is passed
   * in instead of assumed to be $this->value().
   */
  protected function parseImageUrlValue($value, $explode) {

    // If this contains embedded image tags, extract the image URLs.
    if ($this
      ->type() === 'image') {

      // If image tag src is relative (starts with /), convert to an absolute
      // link.
      global $base_root;
      if (strpos($value, '<img src="/') !== FALSE) {
        $value = str_replace('<img src="/', '<img src="' . $base_root . '/', $value);
      }
      if (strip_tags($value) != $value) {
        if ($explode) {
          $values = explode(',', $value);
        }
        else {
          $values = [
            $value,
          ];
        }

        // Check through the value(s) to see if there are any image tags.
        foreach ($values as $key => $val) {
          $matches = [];
          preg_match('/src="([^"]*)"/', $val, $matches);
          if (!empty($matches[1])) {
            $values[$key] = $matches[1];
          }
        }
        $value = implode(',', $values);

        // Remove any HTML tags that might remain.
        $value = strip_tags($value);
      }
    }
    return $value;
  }

  /**
   * {@inheritdoc}
   */
  public static function outputValue($input_value) {
    return $input_value;
  }

  /**
   * {@inheritdoc}
   */
  public static function testValue() {
    return static::testDefaultValue(2, ' ');
  }

  /**
   * {@inheritdoc}
   */
  public static function processedTestValue($items) {
    return $items;
  }

  /**
   * {@inheritdoc}
   */
  public static function processTestExplodeValue($items) {
    if (!is_array($items)) {

      // Call this value statically for static test value.
      $items = SchemaMetatagManager::explode($items);

      // Clean out any empty values that might have been added by explode().
      if (is_array($items)) {
        array_filter($items);
      }
    }
    return $items;
  }

  /**
   * {@inheritdoc}
   */
  public static function testDefaultValue($count = NULL, $delimiter = NULL) {
    $items = [];
    $min = 1;
    $max = isset($count) ? $count : 2;
    $delimiter = isset($delimiter) ? $delimiter : ' ';
    for ($i = $min; $i <= $max; $i++) {

      // Call this value statically for static test value.
      $items[] = SchemaMetatagManager::randomMachineName();
    }
    return implode($delimiter, $items);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MetaNameBase::$absoluteUrl protected property True if the URL value(s) must be absolute.
MetaNameBase::$description protected property A longer explanation of what the field is for.
MetaNameBase::$group protected property The category this meta tag fits in.
MetaNameBase::$id protected property Machine name of the meta tag plugin.
MetaNameBase::$label protected property The title of the plugin.
MetaNameBase::$long protected property True if the tag should use a text area.
MetaNameBase::$multiple protected property True if more than one is allowed.
MetaNameBase::$name protected property Official metatag name. 1
MetaNameBase::$nameAttribute protected property The attribute this tag uses for the name. 3
MetaNameBase::$request protected property Retrieves the currently active request object.
MetaNameBase::$secure protected property True if URL must use HTTPS.
MetaNameBase::$type protected property Type of the value being stored.
MetaNameBase::$value protected property The value of the metatag in this instance.
MetaNameBase::description public function The meta tag's description.
MetaNameBase::form public function Generate a form element for this meta tag. 6
MetaNameBase::group public function The meta tag group this meta tag belongs to.
MetaNameBase::id public function Obtain the meta tag's internal ID.
MetaNameBase::isActive public function Whether or not this meta tag is active.
MetaNameBase::isLong public function Whether or not this meta tag should use a text area.
MetaNameBase::label public function This meta tag's label.
MetaNameBase::multiple public function Whether or not this meta tag supports multiple values.
MetaNameBase::name public function The meta tag's machine name. 1
MetaNameBase::parseImageUrl protected function Extract any image URLs that might be found in a meta tag.
MetaNameBase::requiresAbsoluteUrl public function Whether or not this meta tag must output required absolute URLs.
MetaNameBase::secure public function Whether or not this meta tag must output secure (HTTPS) URLs.
MetaNameBase::tidy private function Make the string presentable.
MetaNameBase::type public function Obtain this meta tag's type.
MetaNameBase::validateTag public static function Validates the metatag data.
MetaNameBase::weight public function This meta tag's form field's weight.
MetaNameBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase::__construct
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.
SchemaNameBase::$schemaMetatagManager protected property The schemaMetatagManager service.
SchemaNameBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
SchemaNameBase::neverExplode protected function Nested elements that cannot be exploded.
SchemaNameBase::output public function Generate the HTML tag output for a meta tag. Overrides MetaNameBase::output 1
SchemaNameBase::outputValue public static function Transform input value to its display output. Overrides SchemaMetatagTestTagInterface::outputValue 2
SchemaNameBase::parseImageUrlValue protected function Parse the image url out of image markup.
SchemaNameBase::pivotItem public static function
SchemaNameBase::processedTestValue public static function Provide a test output value for the input value. Overrides SchemaMetatagTestTagInterface::processedTestValue 17
SchemaNameBase::processItem protected function
SchemaNameBase::processTestExplodeValue public static function Explode a test value. Overrides SchemaMetatagTestTagInterface::processTestExplodeValue
SchemaNameBase::schemaMetatagManager protected function Return the SchemaMetatagManager.
SchemaNameBase::setSchemaMetatagManager public function Sets schemaMetatagManager service.
SchemaNameBase::setValue public function Metatag expects a string value, so serialize any array of values. Overrides MetaNameBase::setValue
SchemaNameBase::testDefaultValue public static function Provide a random test value. Overrides SchemaMetatagTestTagInterface::testDefaultValue
SchemaNameBase::testValue public static function Provide a test input value for the property that will validate. Overrides SchemaMetatagTestTagInterface::testValue 30
SchemaNameBase::value public function The serialized value for the metatag. Overrides MetaNameBase::value
SchemaNameBase::visibilitySelector protected function The #states base visibility selector for this element.
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.