Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / workspaces / src / WorkspaceAssociationStorage.php
diff --git a/web/core/modules/workspaces/src/WorkspaceAssociationStorage.php b/web/core/modules/workspaces/src/WorkspaceAssociationStorage.php
new file mode 100644 (file)
index 0000000..6355e79
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+namespace Drupal\workspaces;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
+
+/**
+ * Defines the storage handler class for the Workspace association entity type.
+ */
+class WorkspaceAssociationStorage extends SqlContentEntityStorage implements WorkspaceAssociationStorageInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function postPush(WorkspaceInterface $workspace) {
+    $this->database
+      ->delete($this->entityType->getBaseTable())
+      ->condition('workspace', $workspace->id())
+      ->execute();
+    $this->database
+      ->delete($this->entityType->getRevisionTable())
+      ->condition('workspace', $workspace->id())
+      ->execute();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getTrackedEntities($workspace_id, $all_revisions = FALSE) {
+    $table = $all_revisions ? $this->getRevisionTable() : $this->getBaseTable();
+    $query = $this->database->select($table, 'base_table');
+    $query
+      ->fields('base_table', ['target_entity_type_id', 'target_entity_id', 'target_entity_revision_id'])
+      ->orderBy('target_entity_revision_id', 'ASC')
+      ->condition('workspace', $workspace_id);
+
+    $tracked_revisions = [];
+    foreach ($query->execute() as $record) {
+      $tracked_revisions[$record->target_entity_type_id][$record->target_entity_revision_id] = $record->target_entity_id;
+    }
+
+    return $tracked_revisions;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getEntityTrackingWorkspaceIds(EntityInterface $entity) {
+    $query = $this->database->select($this->getBaseTable(), 'base_table');
+    $query
+      ->fields('base_table', ['workspace'])
+      ->condition('target_entity_type_id', $entity->getEntityTypeId())
+      ->condition('target_entity_id', $entity->id());
+
+    return $query->execute()->fetchCol();
+  }
+
+}