diff core/lib/Drupal/Core/Entity/SynchronizableInterface.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/lib/Drupal/Core/Entity/SynchronizableInterface.php	Thu May 09 15:34:47 2019 +0100
@@ -0,0 +1,49 @@
+<?php
+
+namespace Drupal\Core\Entity;
+
+/**
+ * Defines methods for an entity that supports synchronization.
+ */
+interface SynchronizableInterface extends EntityInterface {
+
+  /**
+   * Sets the status of the synchronization flag.
+   *
+   * @param bool $status
+   *   The status of the synchronization flag.
+   *
+   * @return $this
+   */
+  public function setSyncing($status);
+
+  /**
+   * Returns whether this entity is being changed as part of a synchronization.
+   *
+   * If you are writing code that responds to a change in this entity (insert,
+   * update, delete, presave, etc.), and your code would result in a change to
+   * this entity itself, a configuration change (whether related to this entity,
+   * another entity, or non-entity configuration), you need to check and see if
+   * this entity change is part of a synchronization process, and skip executing
+   * your code if that is the case.
+   *
+   * For example, \Drupal\node\Entity\NodeType::postSave() adds the default body
+   * field to newly created node type configuration entities, which is a
+   * configuration change. You would not want this code to run during an import,
+   * because imported entities were already given the body field when they were
+   * originally created, and the imported configuration includes all of their
+   * currently-configured fields. On the other hand,
+   * \Drupal\field\Entity\FieldStorageConfig::preSave() and the methods it calls
+   * make sure that the storage tables are created or updated for the field
+   * storage configuration entity, which is not a configuration change, and it
+   * must be done whether due to an import or not. So, the first method should
+   * check $entity->isSyncing() and skip executing if it returns TRUE, and the
+   * second should not perform this check.
+   *
+   * @return bool
+   *   TRUE if the configuration entity is being created, updated, or deleted
+   *   through a synchronization process.
+   */
+  public function isSyncing();
+
+}