public function ImportEntityManager::importRemoteEntity in Acquia Content Hub 8
Saves a Content Hub Entity into a Drupal Entity, given its UUID.
This method accepts a parameter if we want to save all its dependencies. Note that dependencies could be of 2 different types:
- pre-dependency or Entity Independent: Has to be created before the host-entity and referenced from it.
- post-dependency or Entity Dependent: Has to be created after the host-entity and referenced from it.
This is a recursive method, and will also create dependencies of the dependencies.
Parameters
string $uuid: The UUID of the Entity to save.
bool $include_dependencies: TRUE if we want to save all its dependencies, FALSE otherwise.
string $author: The UUID of the author (user) that will own the entity.
int $status: The publishing status of the entity (Applies to nodes).
Return value
\Symfony\Component\HttpFoundation\JsonResponse A JSON Response.
2 calls to ImportEntityManager::importRemoteEntity()
- ImportEntityManager::entityUpdate in src/
ImportEntityManager.php - Act on the entity's update action.
- ImportEntityManager::import in src/
ImportEntityManager.php - Import an entity.
File
- src/
ImportEntityManager.php, line 442
Class
- ImportEntityManager
- Provides a service for managing imported entities' actions.
Namespace
Drupal\acquia_contenthubCode
public function importRemoteEntity($uuid, $include_dependencies = TRUE, $author = NULL, $status = 0) {
// Checking that the parameter given is a UUID.
if (!Uuid::isValid($uuid)) {
// We will just show a standard "access denied" page in this case.
throw new AccessDeniedHttpException();
}
// If the Entity is not found in Content Hub then return a 404 Not Found.
$contenthub_entity = $this
->loadRemoteEntity($uuid);
if (!$contenthub_entity) {
$message = $this
->t('Entity with UUID = @uuid not found.', [
'@uuid' => $uuid,
]);
return $this
->jsonErrorResponseMessage($message, FALSE, 404);
}
$origin = $contenthub_entity
->getRawEntity()
->getOrigin();
$site_origin = $this->contentHubEntitiesTracking
->getSiteOrigin();
// Checking that the entity origin is different than this site's origin.
if ($origin === $site_origin) {
$args = [
'@type' => $contenthub_entity
->getRawEntity()
->getType(),
'@uuid' => $contenthub_entity
->getRawEntity()
->getUuid(),
'@origin' => $origin,
];
$message = $this
->t('Cannot save "@type" entity with uuid="@uuid". It has the same origin as this site: "@origin"', $args);
$this->loggerFactory
->get('acquia_contenthub')
->warning($message);
$result = FALSE;
return $this
->jsonErrorResponseMessage($message, $result, 403);
}
// Checking if bundle exists.
$allowed_entity_types = $this->entityManager
->getAllowedEntityTypes();
$contenthub_entity_attribute = $contenthub_entity
->getRawEntity()
->getAttribute('type')['value'] ?? NULL;
$contenthub_entity_bundle = $contenthub_entity_attribute ? reset($contenthub_entity_attribute) : NULL;
if ($contenthub_entity_bundle && !array_key_exists($contenthub_entity_bundle, $allowed_entity_types[$contenthub_entity
->getRawEntity()
->getType()])) {
$args = [
'@type' => $contenthub_entity
->getRawEntity()
->getType(),
'@uuid' => $contenthub_entity
->getRawEntity()
->getUuid(),
'@bundle' => $contenthub_entity_bundle,
];
$message = $this
->t('Cannot save "@type" entity with uuid="@uuid". Missing "@type" entity with bundle "@bundle"', $args);
$this->loggerFactory
->get('acquia_contenthub')
->warning($message);
$result = FALSE;
return $this
->jsonErrorResponseMessage($message, $result, 403);
}
// Checking that the entity has a language that is supported by this site.
if (!$this
->verifyLanguageSupportability($contenthub_entity)) {
$args = [
'@type' => $contenthub_entity
->getRawEntity()
->getType(),
'@uuid' => $contenthub_entity
->getRawEntity()
->getUuid(),
];
$message = $this
->t('Cannot save "@type" entity with uuid="@uuid". The site does not support any of the languages available for this entity.', $args);
$this->loggerFactory
->get('acquia_contenthub')
->warning($message);
return $this
->jsonErrorResponseMessage($message, FALSE, 403);
}
// Collect and flat out all dependencies.
$dependencies = [];
if ($include_dependencies) {
$dependencies = $this
->getAllRemoteDependencies($contenthub_entity, $dependencies, TRUE);
}
// Obtaining the Status of the parent entity, if it is a node and
// setting the publishing status of that entity.
$contenthub_entity
->setStatus($status);
// Assigning author to this entity and dependencies.
$contenthub_entity
->setAuthor($author);
foreach ($dependencies as $uuid => $dependency) {
$dependencies[$uuid]
->setAuthor($author);
// Only change the Node status of dependent entities if they are nodes,
// if the status flag is set and if they haven't been imported before.
$entity_type = $dependency
->getEntityType();
if (isset($status) && $entity_type === 'node' && !$this->contentHubEntitiesTracking
->loadImportedByUuid($uuid)) {
$dependencies[$uuid]
->setStatus($status);
}
}
// Save this entity and all its dependencies.
return $this
->importRemoteEntityDependencies($contenthub_entity, $dependencies);
}