diff --git a/core/includes/entity.inc b/core/includes/entity.inc index b651e32..88ccee9 100644 --- a/core/includes/entity.inc +++ b/core/includes/entity.inc @@ -43,15 +43,8 @@ function entity_get_info($entity_type = NULL) { $entity_info = module_invoke_all('entity_info'); // Merge in default values. foreach ($entity_info as $name => $data) { + $entity_info[$name] += drupal_container()->get('plugin.manager.entity')->getDefinition($name); $entity_info[$name] += array( - 'fieldable' => FALSE, - 'entity class' => 'Drupal\Core\Entity\Entity', - 'controller class' => 'Drupal\Core\Entity\DatabaseStorageController', - 'form controller class' => array( - 'default' => 'Drupal\Core\Entity\EntityFormController', - ), - 'static cache' => TRUE, - 'field cache' => TRUE, 'bundles' => array(), 'view modes' => array(), 'entity keys' => array(), diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php index 4ad6726..a034080 100644 --- a/core/lib/Drupal/Core/CoreBundle.php +++ b/core/lib/Drupal/Core/CoreBundle.php @@ -52,6 +52,7 @@ public function build(ContainerBuilder $container) { ->setFactoryClass('Drupal\Core\Database\Database') ->setFactoryMethod('getConnection') ->addArgument('slave'); + $container->register('plugin.manager.entity', 'Drupal\Core\Plugin\Type\EntityManager'); // @todo Replace below lines with the commented out block below it when it's // performant to do so: http://drupal.org/node/1706064. diff --git a/core/lib/Drupal/Core/Plugin/Type/EntityManager.php b/core/lib/Drupal/Core/Plugin/Type/EntityManager.php new file mode 100644 index 0000000..885e9f3 --- /dev/null +++ b/core/lib/Drupal/Core/Plugin/Type/EntityManager.php @@ -0,0 +1,50 @@ +discovery = new DerivativeDiscoveryDecorator(new AnnotatedClassDiscovery('Core', 'Entity')); + $this->factory = new DefaultFactory($this); + + $this->defaults = array( + 'fieldable' => FALSE, + 'entity class' => 'Drupal\Core\Entity\Entity', + 'controller class' => 'Drupal\Core\Entity\DatabaseStorageController', + 'form controller class' => array( + 'default' => 'Drupal\Core\Entity\EntityFormController', + ), + 'static cache' => TRUE, + 'field cache' => TRUE, + ); + } + + /** + * Overrides Drupal\Component\Plugin\PluginManagerBase::processDefinition(). + */ + protected function processDefinition(&$definition, $plugin_id) { + parent::processDefinition($definition, $plugin_id); + + foreach ($definition as $key => $value) { + if (strpos($key, '_') !== FALSE) { + $new_key = str_replace('_', ' ', $key); + $definition[$new_key] = $value; + } + } + if (isset($definition['class'])) { + $definition['entity class'] = $definition['class']; + } + } + +} diff --git a/core/modules/book/book.admin.inc b/core/modules/book/book.admin.inc index 5c414e0..4a00657 100644 --- a/core/modules/book/book.admin.inc +++ b/core/modules/book/book.admin.inc @@ -5,7 +5,7 @@ * Admin page callbacks for the book module. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Page callback: Returns an administrative overview of all books. diff --git a/core/modules/book/book.module b/core/modules/book/book.module index fd4fac9..2dd5b45 100644 --- a/core/modules/book/book.module +++ b/core/modules/book/book.module @@ -5,7 +5,7 @@ * Allows users to create and organize related content in an outline. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\Core\Template\Attribute; /** diff --git a/core/modules/book/book.pages.inc b/core/modules/book/book.pages.inc index 90b2192..0451acc 100644 --- a/core/modules/book/book.pages.inc +++ b/core/modules/book/book.pages.inc @@ -5,7 +5,7 @@ * User page callbacks for the book module. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; diff --git a/core/modules/book/lib/Drupal/book/Tests/BookTest.php b/core/modules/book/lib/Drupal/book/Tests/BookTest.php index e60142f..0807579 100644 --- a/core/modules/book/lib/Drupal/book/Tests/BookTest.php +++ b/core/modules/book/lib/Drupal/book/Tests/BookTest.php @@ -7,7 +7,7 @@ namespace Drupal\book\Tests; -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\simpletest\WebTestBase; class BookTest extends WebTestBase { diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module index bd9c107..b3f2eb3 100644 --- a/core/modules/comment/comment.module +++ b/core/modules/comment/comment.module @@ -9,7 +9,7 @@ * book page, etc. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\file\File; use Drupal\Core\Entity\EntityInterface; use Symfony\Component\HttpFoundation\Request; diff --git a/core/modules/comment/comment.pages.inc b/core/modules/comment/comment.pages.inc index ed91d23..2829f61 100644 --- a/core/modules/comment/comment.pages.inc +++ b/core/modules/comment/comment.pages.inc @@ -5,7 +5,7 @@ * User page callbacks for the Comment module. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php index 40edfa5..068e5ac 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php @@ -7,7 +7,7 @@ namespace Drupal\field_ui\Tests; -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Tests the functionality of the 'Manage display' screens. diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module index 61b018a..678b172 100644 --- a/core/modules/forum/forum.module +++ b/core/modules/forum/forum.module @@ -5,7 +5,7 @@ * Provides discussion forums. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\taxonomy\Term; /** diff --git a/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php b/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php index a09ce92..ffa4617 100644 --- a/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php +++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php @@ -7,7 +7,7 @@ namespace Drupal\forum\Tests; -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\simpletest\WebTestBase; /** diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module index cee4ba5..75c483b 100644 --- a/core/modules/menu/menu.module +++ b/core/modules/menu/menu.module @@ -11,7 +11,7 @@ * URLs to be added to the main site navigation menu. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Symfony\Component\HttpFoundation\JsonResponse; diff --git a/core/modules/node/lib/Drupal/node/Node.php b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php similarity index 83% rename from core/modules/node/lib/Drupal/node/Node.php rename to core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php index 45d93f0..c8bc3ac 100644 --- a/core/modules/node/lib/Drupal/node/Node.php +++ b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php @@ -2,16 +2,38 @@ /** * @file - * Definition of Drupal\node\Node. + * Definition of Drupal\node\Plugin\Core\Entity\Node. */ -namespace Drupal\node; +namespace Drupal\node\Plugin\Core\Entity; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\Entity; +use Drupal\Core\Annotation\Plugin; +use Drupal\Core\Annotation\Translation; /** * Defines the node entity class. + * + * @Plugin( + * id = "node", + * label = @Translation("Node"), + * controller_class = "Drupal\node\NodeStorageController", + * form_controller_class = { + * "default" = "Drupal\node\NodeFormController" + * }, + * base_table = "node", + * revision_table = "node_revision", + * uri_callback = "node_uri", + * fieldable = TRUE, + * entity_keys = { + * "id" = "nid", + * "revision" = "vid", + * "bundle" = "type", + * "label" = "title", + * "uuid" = "uuid" + * } + * ) */ class Node extends Entity implements ContentEntityInterface { diff --git a/core/modules/node/node.module b/core/modules/node/node.module index 2d87534..59b5ff0 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -14,7 +14,7 @@ use Drupal\Core\Database\Query\SelectExtender; use Drupal\Core\Database\Query\SelectInterface; use Drupal\Core\Template\Attribute; -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\file\File; use Drupal\Core\Entity\EntityInterface; @@ -195,23 +195,6 @@ function node_cron() { function node_entity_info() { $return = array( 'node' => array( - 'label' => t('Node'), - 'entity class' => 'Drupal\node\Node', - 'controller class' => 'Drupal\node\NodeStorageController', - 'form controller class' => array( - 'default' => 'Drupal\node\NodeFormController', - ), - 'base table' => 'node', - 'revision table' => 'node_revision', - 'uri callback' => 'node_uri', - 'fieldable' => TRUE, - 'entity keys' => array( - 'id' => 'nid', - 'revision' => 'vid', - 'bundle' => 'type', - 'label' => 'title', - 'uuid' => 'uuid', - ), 'bundle keys' => array( 'bundle' => 'type', ), diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc index b2d6a61..9be7689 100644 --- a/core/modules/node/node.pages.inc +++ b/core/modules/node/node.pages.inc @@ -9,7 +9,7 @@ * @see node_menu() */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Page callback: Presents the node editing form. diff --git a/core/modules/node/tests/modules/node_access_test/node_access_test.module b/core/modules/node/tests/modules/node_access_test/node_access_test.module index a503217..a46848c 100644 --- a/core/modules/node/tests/modules/node_access_test/node_access_test.module +++ b/core/modules/node/tests/modules/node_access_test/node_access_test.module @@ -9,7 +9,7 @@ use Drupal\Core\Entity\EntityFieldQuery; -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_node_grants(). diff --git a/core/modules/node/tests/modules/node_test/node_test.module b/core/modules/node/tests/modules/node_test/node_test.module index 1686ff0..01899a0 100644 --- a/core/modules/node/tests/modules/node_test/node_test.module +++ b/core/modules/node/tests/modules/node_test/node_test.module @@ -6,7 +6,7 @@ * the Node module. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_node_load(). diff --git a/core/modules/node/tests/modules/node_test_exception/node_test_exception.module b/core/modules/node/tests/modules/node_test_exception/node_test_exception.module index 570236b..db8333a 100644 --- a/core/modules/node/tests/modules/node_test_exception/node_test_exception.module +++ b/core/modules/node/tests/modules/node_test_exception/node_test_exception.module @@ -6,7 +6,7 @@ * the Node module. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_node_insert(). diff --git a/core/modules/path/path.module b/core/modules/path/path.module index 6a69c13..df143ae 100644 --- a/core/modules/path/path.module +++ b/core/modules/path/path.module @@ -5,7 +5,7 @@ * Enables users to rename URLs. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\taxonomy\Term; diff --git a/core/modules/poll/poll.module b/core/modules/poll/poll.module index dc4722e..687cbd0 100644 --- a/core/modules/poll/poll.module +++ b/core/modules/poll/poll.module @@ -6,7 +6,7 @@ * choice questions. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_help(). diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php index e4f6fe4..0b8b96a 100644 --- a/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php +++ b/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php @@ -7,7 +7,7 @@ namespace Drupal\rdf\Tests; -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\simpletest\WebTestBase; /** diff --git a/core/modules/search/search.module b/core/modules/search/search.module index 315ae7a..716f7af 100644 --- a/core/modules/search/search.module +++ b/core/modules/search/search.module @@ -5,7 +5,7 @@ * Enables site-wide keyword searching. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Matches all 'N' Unicode character classes (numbers) diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module index c07a1c8..5963309 100644 --- a/core/modules/statistics/statistics.module +++ b/core/modules/statistics/statistics.module @@ -5,7 +5,7 @@ * Logs and displays access statistics for a site. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_help(). diff --git a/core/modules/system/tests/modules/theme_page_test/theme_page_test.module b/core/modules/system/tests/modules/theme_page_test/theme_page_test.module index fe86da9..63f8cb4 100644 --- a/core/modules/system/tests/modules/theme_page_test/theme_page_test.module +++ b/core/modules/system/tests/modules/theme_page_test/theme_page_test.module @@ -18,4 +18,4 @@ function theme_page_test_system_theme_info() { $themes['test_invalid_basetheme'] = drupal_get_path('module', 'system') . '/tests/themes/test_invalid_basetheme/test_invalid_basetheme.info'; $themes['test_invalid_engine'] = drupal_get_path('module', 'system') . '/tests/themes/test_invalid_engine/test_invalid_engine.info'; return $themes; -} \ No newline at end of file +} diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module index 0f8b6b5..1ecba95 100644 --- a/core/modules/taxonomy/taxonomy.module +++ b/core/modules/taxonomy/taxonomy.module @@ -5,7 +5,7 @@ * Enables the organization of content into categories. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\taxonomy\Term; use Drupal\taxonomy\Vocabulary; use Drupal\Core\Entity\EntityInterface; diff --git a/core/modules/tracker/tracker.module b/core/modules/tracker/tracker.module index 7060a87..8ef4428 100644 --- a/core/modules/tracker/tracker.module +++ b/core/modules/tracker/tracker.module @@ -5,7 +5,7 @@ * Tracks recent content posted by a user or users. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_help(). diff --git a/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php b/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php index a9fae77..85ce4e8 100644 --- a/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php +++ b/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php @@ -7,7 +7,7 @@ namespace Drupal\translation\Tests; -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; use Drupal\simpletest\WebTestBase; /** diff --git a/core/modules/translation/tests/translation_test.module b/core/modules/translation/tests/translation_test.module index 1bd0659..8c291db 100644 --- a/core/modules/translation/tests/translation_test.module +++ b/core/modules/translation/tests/translation_test.module @@ -5,7 +5,7 @@ * Mock module for content translation tests. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_node_insert(). diff --git a/core/modules/translation/translation.module b/core/modules/translation/translation.module index bf1e528..a05d46a 100644 --- a/core/modules/translation/translation.module +++ b/core/modules/translation/translation.module @@ -19,7 +19,7 @@ * date (0) or needs to be updated (1). */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Implements hook_help(). diff --git a/core/modules/translation/translation.pages.inc b/core/modules/translation/translation.pages.inc index a501870..a38aa29 100644 --- a/core/modules/translation/translation.pages.inc +++ b/core/modules/translation/translation.pages.inc @@ -5,7 +5,7 @@ * User page callbacks for the Translation module. */ -use Drupal\node\Node; +use Drupal\node\Core\Entity\Node; /** * Page callback: Displays a list of a node's translations.