diff --git a/core/lib/Drupal/Core/Entity/EntityViewMode.php b/core/lib/Drupal/Core/Entity/EntityViewMode.php index dd49744..564c1ea 100644 --- a/core/lib/Drupal/Core/Entity/EntityViewMode.php +++ b/core/lib/Drupal/Core/Entity/EntityViewMode.php @@ -10,44 +10,69 @@ use Drupal\Core\Config\Entity\ConfigEntityBase; /** - * @todo. + * Defines the view mode configuration entity class. */ class EntityViewMode extends ConfigEntityBase { /** - * @todo. + * The name of the view mode. * * @var string */ public $name; /** - * @todo. + * The UUID of the view mode. + * + * @var string + */ + public $uuid; + + /** + * The view mode label. * * @var string */ public $label; /** - * @todo. + * An array of entity types that use this view mode. + * + * The array is keyed by the entity type, and the value is either the entity + * type if this view mode is used, or 0 if it is not. * * @var array */ public $entityTypes = array(); + /** + * Overrides Drupal\Core\Core\Entity\Entity::id(). + */ public function id() { return $this->name; } + /** + * Overrides Drupal\Core\Core\Entity\Entity::uri(). + */ public function uri() { return array( 'path' => 'admin/config/system/view-modes/' . $this->id(), - 'options' => array(), + 'options' => array( + 'entity_type' => $this->entityType, + 'entity' => $this, + ), ); } + /** + * Returns the entity types that are used by the view mode. + * + * @return array + * An array where both keys and values are entity types for the view mode. + */ public function getUsedEntityTypes() { - return drupal_map_assoc(array_filter($this->entityTypes)); + return array_filter($this->entityTypes); } } diff --git a/core/modules/view_mode/view_mode.admin.inc b/core/modules/entity_ui/entity_ui.admin.inc similarity index 100% rename from core/modules/view_mode/view_mode.admin.inc rename to core/modules/entity_ui/entity_ui.admin.inc diff --git a/core/modules/entity_ui/entity_ui.info b/core/modules/entity_ui/entity_ui.info new file mode 100644 index 0000000..9dcc4e5 --- /dev/null +++ b/core/modules/entity_ui/entity_ui.info @@ -0,0 +1,7 @@ +name = Entity UI +description = User interface for the Entity API. +package = Core +version = VERSION +core = 8.x +recommends[] = field_ui +configure = admin/config/system/view-modes diff --git a/core/modules/view_mode/view_mode.module b/core/modules/entity_ui/entity_ui.module similarity index 71% rename from core/modules/view_mode/view_mode.module rename to core/modules/entity_ui/entity_ui.module index a863aa6..8f1e757 100644 --- a/core/modules/view_mode/view_mode.module +++ b/core/modules/entity_ui/entity_ui.module @@ -8,7 +8,7 @@ /** * Implements hook_permission(). */ -function view_mode_permission() { +function entity_ui_permission() { return array( 'administer view modes' => array( 'title' => t('Add, edit and delete custom view modes.'), @@ -19,29 +19,29 @@ function view_mode_permission() { /** * Implements hook_entity_info_alter(). */ -function view_mode_entity_info_alter(&$entity_info) { - $entity_info['view_mode']['list controller class'] = 'Drupal\Core\Config\Entity\ConfigEntityListController'; +function entity_ui_entity_info_alter(&$entity_info) { + $entity_info['view_mode']['list controller class'] = 'Drupal\entity_ui\ViewModeListController'; $entity_info['view_mode']['form controller class'] = array( - 'default' => 'Drupal\view_mode\ViewModeFormController', + 'default' => 'Drupal\entity_ui\ViewModeFormController', ); } /** * Implements hook_menu(). */ -function view_mode_menu() { +function entity_ui_menu() { $items['admin/config/system/view-modes'] = array( 'title' => 'View modes', 'description' => 'Manage custom view modes.', 'page callback' => 'view_mode_list', 'access arguments' => array('administer view modes'), - 'file' => 'view_mode.admin.inc', + 'file' => 'entity_ui.admin.inc', ); $items['admin/config/system/view-modes/add'] = array( 'title' => 'Add view mode', 'page callback' => 'view_mode_add', 'access arguments' => array('administer view modes'), - 'file' => 'view_mode.admin.inc', + 'file' => 'entity_ui.admin.inc', 'type' => MENU_LOCAL_ACTION, ); $items['admin/config/system/view-modes/%view_mode/edit'] = array( @@ -55,7 +55,7 @@ function view_mode_menu() { 'page callback' => 'drupal_get_form', 'page arguments' => array('view_mode_delete_form', 4), 'access arguments' => array('administer view modes'), - 'file' => 'view_mode.admin.inc', + 'file' => 'entity_ui.admin.inc', ); return $items; @@ -69,8 +69,17 @@ function view_mode_load($machine_name) { } /** + * Implements hook_view_mode_presave(). + */ +function entity_ui_view_mode_presave($entity) { + entity_info_cache_clear(); + state()->set('menu_rebuild_needed', TRUE); +} + +/** * Implements hook_view_mode_delete(). */ -function view_mode_view_mode_delete($entity) { +function entity_ui_view_mode_delete($entity) { entity_info_cache_clear(); + state()->set('menu_rebuild_needed', TRUE); } diff --git a/core/modules/view_mode/lib/Drupal/view_mode/Tests/ViewModeTest.php b/core/modules/entity_ui/lib/Drupal/entity_ui/Tests/ViewModeTest.php similarity index 66% rename from core/modules/view_mode/lib/Drupal/view_mode/Tests/ViewModeTest.php rename to core/modules/entity_ui/lib/Drupal/entity_ui/Tests/ViewModeTest.php index 141edb0..e369da4 100644 --- a/core/modules/view_mode/lib/Drupal/view_mode/Tests/ViewModeTest.php +++ b/core/modules/entity_ui/lib/Drupal/entity_ui/Tests/ViewModeTest.php @@ -2,10 +2,10 @@ /** * @file - * Definition of Drupal\view_mode\Tests\ViewModeTest. + * Definition of Drupal\entity_ui\Tests\ViewModeTest. */ -namespace Drupal\view_mode\Tests; +namespace Drupal\entity_ui\Tests; use Drupal\simpletest\WebTestBase; @@ -19,47 +19,37 @@ class ViewModeTest extends WebTestBase { * * @var array */ - public static $modules = array('field_ui', 'view_mode'); + public static $modules = array('field_ui', 'entity_ui'); - protected $profile = 'standard'; - - - /** - * Implements getInfo(). - */ public static function getInfo() { return array( - 'name' => t('View modes'), - 'description' => t('Tests for managing custom view modes.'), - 'group' => t('View mode'), + 'name' => 'View modes', + 'description' => 'Tests for managing custom view modes.', + 'group' => 'Entity UI', ); } - /** - * Implements setUp(). - */ function setUp() { parent::setUp(); - $this->admin_user = $this->drupalCreateUser(array('administer content types', 'administer users', 'administer view modes', 'access administration pages')); - $this->drupalLogin($this->admin_user); + $this->drupalLogin($this->drupalCreateUser(array('administer content types', 'administer users', 'administer view modes', 'access administration pages'))); + $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article')); } /** - * Create a view mode. + * Creates a view mode. * - * @param $edit - * An optional array of view mode properties. + * @param array $edit + * (optional) An array of view mode properties. Defaults to an empty array. */ - function createViewMode($edit = array()) { - + function createViewMode(&$edit = array()) { $edit += array( - 'name' => 'Testing', - 'label' => 'testing', + 'label' => 'Testing', + 'name' => 'testing', 'entityTypes[node]' => '1' ); - $this->drupalPost('admin/config/system/view-modes/add', $edit, 'Save'); + $this->drupalPost('admin/config/system/view-modes/add', $edit, t('Save')); $this->assertText(format_string('Saved the !name view mode.', array('!name' => $edit['label']))); } @@ -67,17 +57,11 @@ function createViewMode($edit = array()) { * Test managing view modes. */ function testManageViewModes() { - - $edit = array( - 'label' => 'Testing', - 'name' => 'testing', - 'entityTypes[node]' => '1' - ); - + $edit = array(); $this->createViewMode($edit); // Create the same and assert it already exists. - $this->drupalPost('admin/config/system/view-modes/add', $edit, 'Save'); + $this->drupalPost('admin/config/system/view-modes/add', $edit, t('Save')); $this->assertText('The machine-readable name is already in use. It must be unique.', 'View mode testing already exists.'); // Assert it's found on the Field UI for article. @@ -88,19 +72,20 @@ function testManageViewModes() { $this->drupalGet('admin/config/people/accounts/display'); $this->assertNoRaw('view_modes_custom[testing]', 'Testing view mode not found on user.'); - // Update testing label + // Update view mode label. $edit = array( 'label' => 'Testing 2', ); - $this->drupalPost('admin/config/system/view-modes/testing/edit', $edit, 'Save'); - $this->assertText('Saved the Testing 2 view mode.', 'Testing label updated'); + $this->drupalPost('admin/config/system/view-modes/testing/edit', $edit, t('Save')); + $this->assertText('Saved the Testing 2 view mode.', 'Testing label updated.'); // Remove a view mode. - $this->drupalPost('admin/config/system/view-modes/testing/delete', array(), 'Delete'); - $this->assertText('Deleted the Testing 2 view mode', 'Deleted the Testing view mode'); + $this->drupalPost('admin/config/system/view-modes/testing/delete', array(), t('Delete')); + $this->assertText('Deleted the Testing 2 view mode', 'Deleted the Testing view mode.'); // Assert the view mode is gone at the manage display screen. $this->drupalGet('admin/structure/types/manage/article/display'); $this->assertNoRaw('view_modes_custom[testing]', 'Testing view mode not found on node article.'); } + } diff --git a/core/modules/view_mode/lib/Drupal/view_mode/ViewModeFormController.php b/core/modules/entity_ui/lib/Drupal/entity_ui/ViewModeFormController.php similarity index 76% rename from core/modules/view_mode/lib/Drupal/view_mode/ViewModeFormController.php rename to core/modules/entity_ui/lib/Drupal/entity_ui/ViewModeFormController.php index 4c14a70..a2e97e2 100644 --- a/core/modules/view_mode/lib/Drupal/view_mode/ViewModeFormController.php +++ b/core/modules/entity_ui/lib/Drupal/entity_ui/ViewModeFormController.php @@ -2,10 +2,10 @@ /** * @file - * Definition of Drupal\view_mode\ViewModeFormController. + * Definition of Drupal\entity_ui\ViewModeFormController. */ -namespace Drupal\view_mode; +namespace Drupal\entity_ui; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityFormController; @@ -19,16 +19,10 @@ class ViewModeFormController extends EntityFormController { * Overrides Drupal\Core\Entity\EntityFormController::form(). */ public function form(array $form, array &$form_state, EntityInterface $view_mode) { - $label = $view_mode->label(); - $form['is_new'] = array( - '#type' => 'value', - '#value' => $view_mode->isNew(), - ); - $form['label'] = array( '#type' => 'textfield', '#title' => t('Label'), - '#default_value' => $label, + '#default_value' => $view_mode->label, '#required' => TRUE, ); @@ -38,8 +32,8 @@ public function form(array $form, array &$form_state, EntityInterface $view_mode 'source' => array('label'), 'exists' => 'view_mode_load', ), - '#default_value' => $view_mode->id(), - '#disabled' => !empty($label), + '#default_value' => $view_mode->name, + '#disabled' => !empty($view_mode->label), ); $options = array(); @@ -63,6 +57,8 @@ public function form(array $form, array &$form_state, EntityInterface $view_mode /** * Overrides Drupal\Core\Entity\EntityFormController::save(). + * + * @todo Move this code to the base controller: http://drupal.org/node/1728786 */ public function save(array $form, array &$form_state) { $view_mode = $this->getEntity($form_state); @@ -72,14 +68,12 @@ public function save(array $form, array &$form_state) { ))); $form_state['redirect'] = 'admin/config/system/view-modes'; - - // Clear the static entity info cache and rebuild the menu. - entity_info_cache_clear(); - state()->set('menu_rebuild_needed', TRUE); } /** * Overrides Drupal\Core\Entity\EntityFormController::delete(). + * + * @todo Move this code to the base controller: http://drupal.org/node/1728786 */ public function delete(array $form, array &$form_state) { $destination = array(); @@ -89,10 +83,6 @@ public function delete(array $form, array &$form_state) { } $view_mode = $this->getEntity($form_state); $form_state['redirect'] = array('admin/config/system/view-modes/' . $view_mode->id() . '/delete', array('query' => $destination)); - - // Clear the static entity info cache and rebuild the menu. - entity_info_cache_clear(); - state()->set('menu_rebuild_needed', TRUE); } } diff --git a/core/modules/entity_ui/lib/Drupal/entity_ui/ViewModeListController.php b/core/modules/entity_ui/lib/Drupal/entity_ui/ViewModeListController.php new file mode 100644 index 0000000..f55f701 --- /dev/null +++ b/core/modules/entity_ui/lib/Drupal/entity_ui/ViewModeListController.php @@ -0,0 +1,45 @@ +getUsedEntityTypes() as $entity_type) { + $entity_types[] = $entity_info[$entity_type]['label']; + } + $row['entities'] = implode(', ', $entity_types); + $row['operations'] = $operations; + return $row; + } + +} diff --git a/core/modules/system/system.module b/core/modules/system/system.module index bb89fc4..19afe93 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -1082,6 +1082,8 @@ function system_menu() { * Implements hook_entity_info(). */ function system_entity_info() { + // This entity type is provided on behalf of the entity system. + // @todo Remove from system module after http://drupal.org/node/1763974. $return = array( 'view_mode' => array( 'label' => t('View mode'), diff --git a/core/modules/view_mode/view_mode.info b/core/modules/view_mode/view_mode.info deleted file mode 100644 index 56157b8..0000000 --- a/core/modules/view_mode/view_mode.info +++ /dev/null @@ -1,7 +0,0 @@ -name = View modes -description = Allows administrators to define custom view modes for entities via the administration user interface. -package = Core -version = VERSION -core = 8.x -recommends[] = field_ui -configure = admin/config/system/view-modes