diff --git a/core/modules/block/src/BlockBase.php b/core/modules/block/src/BlockBase.php index c363dd9..91e7421 100644 --- a/core/modules/block/src/BlockBase.php +++ b/core/modules/block/src/BlockBase.php @@ -100,19 +100,9 @@ public function setConfiguration(array $configuration) { */ protected function baseConfigurationDefaults() { // @todo Allow list of conditions to be configured. - $visibility = array(); - if (\Drupal::moduleHandler()->moduleExists('system')) { - $visibility['request_path'] = array('id' => 'request_path'); - } - if (\Drupal::moduleHandler()->moduleExists('user')) { - $visibility['user_role'] = array('id' => 'user_role'); - } - if (\Drupal::moduleHandler()->moduleExists('node')) { - $visibility['node_type'] = array('id' => 'node_type'); - } - if (\Drupal::moduleHandler()->moduleExists('language')) { - $visibility['language'] = array('id' => 'language'); - } + $visibility = array_map(function ($definition) { + return array('id' => $definition['id']); + }, $this->conditionPluginManager()->getDefinitions()); return array( 'id' => $this->getPluginId(), 'label' => '', @@ -294,15 +284,17 @@ public function buildConfigurationForm(array $form, array &$form_state) { $form['cache']['contexts']['#description'] .= ' ' . t('This block is always varied by the following contexts: %required-context-list.', array('%required-context-list' => $required_context_list)); } - // @todo Use vertical tabs here. - $form['visibility'] = array( - '#type' => 'fieldgroup', + $form['visibility_tabs'] = array( + '#type' => 'vertical_tabs', '#title' => $this->t('Visibility'), + '#parents' => array('visibility_tabs'), ); foreach ($this->getVisibilityConditions() as $condition_id => $condition) { - $form['visibility'][$condition_id] = $condition->buildConfigurationForm(array(), $form_state); - $form['visibility'][$condition_id]['#type'] = 'details'; - $form['visibility'][$condition_id]['#title'] = $condition->getPluginDefinition()['label']; + $condition_form = $condition->buildConfigurationForm(array(), $form_state); + $condition_form['#type'] = 'details'; + $condition_form['#title'] = $condition->getPluginDefinition()['label']; + $condition_form['#group'] = 'visibility_tabs'; + $form['visibility'][$condition_id] = $condition_form; } // Add plugin-specific settings for this block type. $form += $this->blockForm($form, $form_state); diff --git a/core/modules/block/tests/src/BlockBaseTest.php b/core/modules/block/tests/src/BlockBaseTest.php index 6fddb58..d082894 100644 --- a/core/modules/block/tests/src/BlockBaseTest.php +++ b/core/modules/block/tests/src/BlockBaseTest.php @@ -33,14 +33,17 @@ public static function getInfo() { * @see \Drupal\block\BlockBase::getMachineNameSuggestion(). */ public function testGetMachineNameSuggestion() { - $module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); $transliteraton = $this->getMockBuilder('Drupal\Core\Transliteration\PHPTransliteration') // @todo Inject the module handler into PHPTransliteration. ->setMethods(array('readLanguageOverrides')) ->getMock(); + $condition_plugin_manager = $this->getMock('Drupal\Core\Executable\ExecutableManagerInterface'); + $condition_plugin_manager->expects($this->atLeastOnce()) + ->method('getDefinitions') + ->will($this->returnValue(array())); $container = new ContainerBuilder(); - $container->set('module_handler', $module_handler); + $container->set('plugin.manager.condition', $condition_plugin_manager); $container->set('transliteration', $transliteraton); \Drupal::setContainer($container); @@ -65,17 +68,24 @@ public function testGetMachineNameSuggestion() { * Tests initialising the condition plugins initialisation. */ public function testCondtionsBagInitialisation() { - $module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); - $module_handler->expects($this->exactly(4)) - ->method('moduleExists') - ->will($this->returnValueMap(array( - array('system', TRUE), - array('user', TRUE), - array('node', TRUE), - array('language', TRUE), + $plugin_manager = $this->getmock('drupal\core\executable\executablemanagerinterface'); + $plugin_manager->expects($this->once()) + ->method('getDefinitions') + ->will($this->returnValue(array( + 'request_path' => array( + 'id' => 'request_path', + ), + 'user_role' => array( + 'id' => 'user_role', + ), + 'node_type' => array( + 'id' => 'node_type', + ), + 'language' => array( + 'id' => 'language', + ), ))); $container = new ContainerBuilder(); - $container->set('module_handler', $module_handler); \Drupal::setContainer($container); $config = array(); $definition = array( @@ -83,9 +93,7 @@ public function testCondtionsBagInitialisation() { 'provider' => 'block_test', ); - $plugin_manager = $this->getMock('Drupal\Core\Executable\ExecutableManagerInterface'); - - $block_base = new FakeBlock($plugin_manager, $config, 'test_block_instantiation', $definition); + $block_base = new TestBlockInstantiation($config, 'test_block_instantiation', $definition); $conditions_bag = $block_base->getVisibilityConditions(); $this->assertEquals(4, $conditions_bag->count(), "There are 4 condition plugins"); @@ -104,21 +112,3 @@ public function testCondtionsBagInitialisation() { } } - -/** - * A fake Block for testing condition plugin config. - */ -class FakeBlock extends TestBlockInstantiation { - - protected $mockPluginManager; - - public function __construct(ExecutableManagerInterface $plugin_manager, array $configuration, $plugin_id, $plugin_definition) { - parent::__construct($configuration, $plugin_id, $plugin_definition); - $this->mockPluginManager = $plugin_manager; - } - - protected function conditionPluginManager() { - return $this->mockPluginManager; - } - -} diff --git a/core/modules/views/tests/src/Plugin/Block/ViewsBlockTest.php b/core/modules/views/tests/src/Plugin/Block/ViewsBlockTest.php index 34a0b99..c1029dd 100644 --- a/core/modules/views/tests/src/Plugin/Block/ViewsBlockTest.php +++ b/core/modules/views/tests/src/Plugin/Block/ViewsBlockTest.php @@ -72,9 +72,12 @@ public static function getInfo() { */ protected function setUp() { parent::setUp(); // TODO: Change the autogenerated stub - $module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface'); + $condition_plugin_manager = $this->getMock('Drupal\Core\Executable\ExecutableManagerInterface'); + $condition_plugin_manager->expects($this->any()) + ->method('getDefinitions') + ->will($this->returnValue(array())); $container = new ContainerBuilder(); - $container->set('module_handler', $module_handler); + $container->set('plugin.manager.condition', $condition_plugin_manager); \Drupal::setContainer($container); $this->executable = $this->getMockBuilder('Drupal\views\ViewExecutable')