static::ID_MAX_LENGTH) { throw new EntityTypeIdLengthException(String::format( 'Attempt to create an entity type with an ID longer than @max characters: @id.', array( '@max' => static::ID_MAX_LENGTH, '@id' => $definition['id'], ) )); } foreach ($definition as $property => $value) { $this->{$property} = $value; } // Ensure defaults. $this->entity_keys += array( 'revision' => '', 'bundle' => '' ); $this->controllers += array( 'access' => 'Drupal\Core\Entity\EntityAccessControlHandler', ); } /** * {@inheritdoc} */ public function get($property) { return isset($this->{$property}) ? $this->{$property} : NULL; } /** * {@inheritdoc} */ public function set($property, $value) { $this->{$property} = $value; return $this; } /** * {@inheritdoc} */ public function isStaticallyCacheable() { return $this->static_cache; } /** * {@inheritdoc} */ public function isRenderCacheable() { return $this->render_cache; } /** * {@inheritdoc} */ public function isPersistentlyCacheable() { return $this->persistent_cache; } /** * {@inheritdoc} */ public function getKeys() { return $this->entity_keys; } /** * {@inheritdoc} */ public function getKey($key) { $keys = $this->getKeys(); return isset($keys[$key]) ? $keys[$key] : FALSE; } /** * {@inheritdoc} */ public function hasKey($key) { $keys = $this->getKeys(); return !empty($keys[$key]); } /** * {@inheritdoc} */ public function id() { return $this->id; } /** * {@inheritdoc} */ public function getProvider() { return $this->provider; } /** * {@inheritdoc} */ public function getClass() { return $this->class; } /** * {@inheritdoc} */ public function getOriginalClass() { return $this->originalClass ?: $this->class; } /** * {@inheritdoc} */ public function setClass($class) { if (!$this->originalClass && $this->class) { // If the original class is currently not set, set it to the current // class, assume that is the original class name. $this->originalClass = $this->class; } $this->class = $class; return $this; } /** * {@inheritdoc} */ public function isSubclassOf($class) { return is_subclass_of($this->getClass(), $class); } /** * {@inheritdoc} */ public function getControllerClasses() { return $this->controllers; } /** * {@inheritdoc} */ public function getControllerClass($controller_type, $nested = FALSE) { if ($this->hasControllerClass($controller_type, $nested)) { $controllers = $this->getControllerClasses(); return $nested ? $controllers[$controller_type][$nested] : $controllers[$controller_type]; } } /** * {@inheritdoc} */ public function setControllerClass($controller_type, $value) { $this->controllers[$controller_type] = $value; return $this; } /** * {@inheritdoc} */ public function hasControllerClass($controller_type, $nested = FALSE) { $controllers = $this->getControllerClasses(); if (!isset($controllers[$controller_type]) || ($nested && !isset($controllers[$controller_type][$nested]))) { return FALSE; } $controller = $controllers[$controller_type]; if ($nested) { $controller = $controller[$nested]; } return class_exists($controller); } /** * {@inheritdoc} */ public function getStorageClass() { return $this->getControllerClass('storage'); } /** * {@inheritdoc} */ public function setStorageClass($class) { $this->controllers['storage'] = $class; } /** * {@inheritdoc} */ public function getFormClass($operation) { return $this->getControllerClass('form', $operation); } /** * {@inheritdoc} */ public function setFormClass($operation, $class) { $this->controllers['form'][$operation] = $class; return $this; } /** * {@inheritdoc} */ public function hasFormClasses() { return !empty($this->controllers['form']); } /** * {@inheritdoc} */ public function getListBuilderClass() { return $this->getControllerClass('list_builder'); } /** * {@inheritdoc} */ public function setListBuilderClass($class) { $this->controllers['list_builder'] = $class; return $this; } /** * {@inheritdoc} */ public function hasListBuilderClass() { return $this->hasControllerClass('list_builder'); } /** * {@inheritdoc} */ public function getViewBuilderClass() { return $this->getControllerClass('view_builder'); } /** * {@inheritdoc} */ public function setViewBuilderClass($class) { $this->controllers['view_builder'] = $class; return $this; } /** * {@inheritdoc} */ public function hasViewBuilderClass() { return $this->hasControllerClass('view_builder'); } /** * {@inheritdoc} */ public function getAccessControlClass() { return $this->getControllerClass('access'); } /** * {@inheritdoc} */ public function setAccessClass($class) { $this->controllers['access'] = $class; return $this; } /** * {@inheritdoc} */ public function getAdminPermission() { return $this->admin_permission ?: FALSE; } /** * {@inheritdoc} */ public function getPermissionGranularity() { return $this->permission_granularity; } /** * {@inheritdoc} */ public function isFieldable() { return $this->fieldable; } /** * {@inheritdoc} */ public function getLinkTemplates() { return $this->links; } /** * {@inheritdoc} */ public function getLinkTemplate($key) { $links = $this->getLinkTemplates(); return isset($links[$key]) ? $links[$key] : FALSE; } /** * {@inheritdoc} */ public function hasLinkTemplate($key) { $links = $this->getLinkTemplates(); return isset($links[$key]); } /** * {@inheritdoc} */ public function setLinkTemplate($key, $route_name) { $this->links[$key] = $route_name; return $this; } /** * {@inheritdoc} */ public function getLabelCallback() { return $this->label_callback; } /** * {@inheritdoc} */ public function setLabelCallback($callback) { $this->label_callback = $callback; return $this; } /** * {@inheritdoc} */ public function hasLabelCallback() { return isset($this->label_callback); } /** * {@inheritdoc} */ public function getBundleEntityType() { return $this->bundle_entity_type; } /** * {@inheritdoc} */ public function getBundleOf() { return $this->bundle_of; } /** * {@inheritdoc} */ public function getBundleLabel() { return $this->bundle_label; } /** * {@inheritdoc} */ public function getBaseTable() { return $this->base_table; } /** * {@inheritdoc} */ public function isTranslatable() { return !empty($this->translatable); } /** * {@inheritdoc} */ public function isRevisionable() { // Entity types are revisionable if a revision key has been specified. return $this->hasKey('revision'); } /** * {@inheritdoc} */ public function getConfigPrefix() { return FALSE; } /** * {@inheritdoc} */ public function getRevisionDataTable() { return $this->revision_data_table; } /** * {@inheritdoc} */ public function getRevisionTable() { return $this->revision_table; } /** * {@inheritdoc} */ public function getDataTable() { return $this->data_table; } /** * {@inheritdoc} */ public function getLabel() { return $this->label; } /** * {@inheritdoc} */ public function getLowercaseLabel() { return Unicode::strtolower($this->getLabel()); } /** * {@inheritdoc} */ public function getUriCallback() { return $this->uri_callback; } /** * {@inheritdoc} */ public function setUriCallback($callback) { $this->uri_callback = $callback; return $this; } /** * {@inheritdoc} */ public function getGroup() { return $this->group; } /** * {@inheritdoc} */ public function getGroupLabel() { return !empty($this->group_label) ? $this->group_label : $this->t('Other', array(), array('context' => 'Entity type group')); } }