Mercurial > hg > cmmr2012-drupal-site
diff core/modules/rdf/src/Entity/RdfMapping.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/rdf/src/Entity/RdfMapping.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,167 @@ +<?php + +namespace Drupal\rdf\Entity; + +use Drupal\Core\Config\Entity\ConfigEntityBase; +use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\rdf\RdfMappingInterface; + +/** + * Config entity for working with RDF mappings. + * + * @ConfigEntityType( + * id = "rdf_mapping", + * label = @Translation("RDF mapping"), + * label_singular = @Translation("RDF mapping item"), + * label_plural = @Translation("RDF mappings items"), + * label_count = @PluralTranslation( + * singular = "@count RDF mapping item", + * plural = "@count RDF mapping items", + * ), + * config_prefix = "mapping", + * entity_keys = { + * "id" = "id" + * }, + * admin_permission = "administer site configuration", + * config_export = { + * "id", + * "targetEntityType", + * "bundle", + * "types", + * "fieldMappings", + * } + * ) + */ +class RdfMapping extends ConfigEntityBase implements RdfMappingInterface { + + /** + * Unique ID for the config entity. + * + * @var string + */ + protected $id; + + /** + * Entity type to be mapped. + * + * @var string + */ + protected $targetEntityType; + + /** + * Bundle to be mapped. + * + * @var string + */ + protected $bundle; + + /** + * The RDF type mapping for this bundle. + * + * @var array + */ + protected $types = []; + + /** + * The mappings for fields on this bundle. + * + * @var array + */ + protected $fieldMappings = []; + + /** + * {@inheritdoc} + */ + public function getPreparedBundleMapping() { + return ['types' => $this->types]; + } + + /** + * {@inheritdoc} + */ + public function getBundleMapping() { + if (!empty($this->types)) { + return ['types' => $this->types]; + } + return []; + } + + /** + * {@inheritdoc} + */ + public function setBundleMapping(array $mapping) { + if (isset($mapping['types'])) { + $this->types = $mapping['types']; + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getPreparedFieldMapping($field_name) { + $field_mapping = [ + 'properties' => NULL, + 'datatype' => NULL, + 'datatype_callback' => NULL, + 'mapping_type' => NULL, + ]; + if (isset($this->fieldMappings[$field_name])) { + $field_mapping = array_merge($field_mapping, $this->fieldMappings[$field_name]); + } + return empty($field_mapping['properties']) ? [] : $field_mapping; + } + + /** + * {@inheritdoc} + */ + public function getFieldMapping($field_name) { + if (isset($this->fieldMappings[$field_name])) { + return $this->fieldMappings[$field_name]; + } + return []; + } + + /** + * {@inheritdoc} + */ + public function setFieldMapping($field_name, array $mapping = []) { + $this->fieldMappings[$field_name] = $mapping; + return $this; + } + + /** + * {@inheritdoc} + */ + public function id() { + return $this->targetEntityType . '.' . $this->bundle; + } + + /** + * {@inheritdoc} + */ + public function calculateDependencies() { + parent::calculateDependencies(); + + // Create dependency on the bundle. + $entity_type = \Drupal::entityManager()->getDefinition($this->targetEntityType); + $this->addDependency('module', $entity_type->getProvider()); + $bundle_config_dependency = $entity_type->getBundleConfigDependency($this->bundle); + $this->addDependency($bundle_config_dependency['type'], $bundle_config_dependency['name']); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function postSave(EntityStorageInterface $storage, $update = TRUE) { + parent::postSave($storage, $update); + + if (\Drupal::entityManager()->hasHandler($this->targetEntityType, 'view_builder')) { + \Drupal::entityManager()->getViewBuilder($this->targetEntityType)->resetCache(); + } + } + +}