Pull merge.
[yaffs-website] / web / core / modules / path / src / Plugin / Field / FieldType / PathFieldItemList.php
index ee03361d961d5c6f2057d348103227fde81b9228..1985499dee5278a4db62b9921fb6a31b025bfb4c 100644 (file)
@@ -4,13 +4,50 @@ namespace Drupal\path\Plugin\Field\FieldType;
 
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Field\FieldItemList;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\TypedData\ComputedItemListTrait;
 
 /**
  * Represents a configurable entity path field.
  */
 class PathFieldItemList extends FieldItemList {
 
+  use ComputedItemListTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function computeValue() {
+    // Default the langcode to the current language if this is a new entity or
+    // there is no alias for an existent entity.
+    // @todo Set the langcode to not specified for untranslatable fields
+    //   in https://www.drupal.org/node/2689459.
+    $value = ['langcode' => $this->getLangcode()];
+
+    $entity = $this->getEntity();
+    if (!$entity->isNew()) {
+      $conditions = [
+        'source' => '/' . $entity->toUrl()->getInternalPath(),
+        'langcode' => $this->getLangcode(),
+      ];
+      $alias = \Drupal::service('path.alias_storage')->load($conditions);
+      if ($alias === FALSE) {
+        // Fall back to non-specific language.
+        if ($this->getLangcode() !== LanguageInterface::LANGCODE_NOT_SPECIFIED) {
+          $conditions['langcode'] = LanguageInterface::LANGCODE_NOT_SPECIFIED;
+          $alias = \Drupal::service('path.alias_storage')->load($conditions);
+        }
+      }
+
+      if ($alias) {
+        $value = $alias;
+      }
+    }
+
+    $this->list[0] = $this->createItem(0, $value);
+  }
+
   /**
    * {@inheritdoc}
    */