Commit cc7b115e authored by catch's avatar catch

Issue #2053461 by larowlan, andypost, tim.plunkett, swentel: Node type...

Issue #2053461 by larowlan, andypost, tim.plunkett, swentel: Node type settings such as published state, promoted state, create revision and author information cannot be turned off.
parent f8d09132
......@@ -119,7 +119,7 @@ protected function init(array &$form_state, EntityInterface $entity, $field_name
if ($entity->entityType() == 'node') {
$node_type_settings = $this->nodeTypeStorage->load($entity->bundle())->getModuleSettings('node');
$options = (isset($node_type_settings['options'])) ? $node_type_settings['options'] : array();
$entity->setNewRevision(in_array('revision', $options));
$entity->setNewRevision(!empty($options['revision']));
$entity->log = NULL;
}
......
......@@ -245,7 +245,9 @@ public function testUserWithPermission() {
// then again retrieve the field form, fill it, submit it (so it ends up
// in TempStore) and then save the entity. Now there should be two
// revisions.
$this->container->get('config.factory')->get('node.type.article')->set('settings.node.options', array('status', 'revision'))->save();
$node_type = entity_load('node_type', 'article');
$node_type->settings['node']['options']['revision'] = TRUE;
$node_type->save();
// Retrieve field form.
$post = array('nocssjs' => 'true', 'reset' => 'true');
......
......@@ -9,7 +9,7 @@ settings:
node:
preview: 1
options:
status: status
status: true
# Not promoted to front page.
promote: false
sticky: false
......
......@@ -61,16 +61,16 @@ node.settings.node:
label: 'Publishing options'
mapping:
status:
type: string
type: boolean
label: 'Published'
promote:
type: string
type: boolean
label: 'Promoted to front page'
sticky:
type: string
type: boolean
label: 'Sticky at top of lists'
revision:
type: string
type: boolean
label: 'Create new revision'
submitted:
type: boolean
......
......@@ -7,6 +7,7 @@
namespace Drupal\node\Entity;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Config\Entity\ConfigEntityBase;
use Drupal\Core\Entity\EntityStorageControllerInterface;
use Drupal\node\NodeTypeInterface;
......@@ -209,4 +210,26 @@ public static function postDelete(EntityStorageControllerInterface $storage_cont
}
}
/**
* {@inheritdoc}
*/
public static function preCreate(EntityStorageControllerInterface $storage_controller, array &$values) {
parent::preCreate($storage_controller, $values);
// Ensure default values are set.
if (!isset($values['settings']['node'])) {
$values['settings']['node'] = array();
}
$values['settings']['node'] = NestedArray::mergeDeep(array(
'options' => array(
'status' => TRUE,
'promote' => TRUE,
'sticky' => FALSE,
'revision' => FALSE,
),
'preview' => DRUPAL_OPTIONAL,
'submitted' => TRUE,
), $values['settings']['node']);
}
}
......@@ -44,7 +44,7 @@ protected function prepareEntity() {
foreach (array('status', 'promote', 'sticky') as $key) {
// Multistep node forms might have filled in something already.
if ($node->$key->isEmpty()) {
$node->$key = (int) in_array($key, $this->settings['options']);
$node->$key = (int) !empty($this->settings['options'][$key]);
}
}
$node->setAuthorId(\Drupal::currentUser()->id());
......@@ -56,7 +56,7 @@ protected function prepareEntity() {
$node->log = NULL;
}
// Always use the default revision setting.
$node->setNewRevision(in_array('revision', $this->settings['options']));
$node->setNewRevision(!empty($this->settings['options']['revision']));
}
/**
......
......@@ -8,7 +8,7 @@
namespace Drupal\node;
use Drupal\Core\Entity\EntityFormController;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Component\Utility\MapArray;
use Drupal\Component\Utility\String;
/**
......@@ -31,13 +31,8 @@ public function form(array $form, array &$form_state) {
}
$node_settings = $type->getModuleSettings('node');
// Ensure default settings.
$node_settings += array(
'options' => array('status', 'promote'),
'preview' => DRUPAL_OPTIONAL,
'submitted' => TRUE,
);
// Prepare node options to be used for 'checkboxes' form element.
$node_settings['options'] = MapArray::copyValuesToKeys(array_keys(array_filter($node_settings['options'])));
$form['name'] = array(
'#title' => t('Name'),
'#type' => 'textfield',
......
......@@ -60,6 +60,19 @@ function testNodeCreation() {
// Check that the node exists in the database.
$node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
$this->assertTrue($node, 'Node found in database.');
// Verify that pages do not show submitted information by default.
$submitted_by = t('Submitted by !username on !datetime', array('!username' => $this->loggedInUser->getUsername(), '!datetime' => format_date($node->getCreatedTime())));
$this->drupalGet('node/' . $node->id());
$this->assertNoText($submitted_by);
// Change the node type setting to show submitted by information.
$node_type = entity_load('node_type', 'page');
$node_type->settings['node']['submitted'] = TRUE;
$node_type->save();
$this->drupalGet('node/' . $node->id());
$this->assertText($submitted_by);
}
/**
......
......@@ -61,6 +61,7 @@ function testPagePostInfo() {
$this->drupalPostForm('node/add/page', $edit, t('Save'));
// Check that the post information is displayed.
$this->assertNoRaw('<span class="submitted">', 'Post information is not displayed.');
$elements = $this->xpath('//*[contains(@class,:class)]', array(':class' => 'submitted'));
$this->assertEqual(count($elements), 0, 'Post information is not displayed.');
}
}
......@@ -34,7 +34,13 @@ function setUp() {
// Create Basic page and Article node types.
if ($this->profile != 'standard') {
$this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page'));
$this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page', 'settings' => array(
// Set proper default options for the page content type.
'node' => array(
'options' => array('promote' => FALSE),
'submitted' => FALSE,
),
)));
$this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
}
$this->accessController = \Drupal::entityManager()->getAccessController('node');
......
......@@ -692,10 +692,11 @@ function template_preprocess_node(&$variables) {
field_attach_preprocess($node, $variables['content'], $variables);
// Display post information only on certain node types.
// Avoid loading the entire node type config entity here.
$submitted = \Drupal::config('node.type.' . $node->bundle())->get('settings.node.submitted') ?: TRUE;
if ($submitted) {
$variables['display_submitted'] = TRUE;
// Avoid loading the entire node type config entity here that may not exist.
$node_type_config = \Drupal::config('node.type.' . $node->bundle());
// Display submitted by default.
$variables['display_submitted'] = $node_type_config->isNew() || $node_type_config->get('settings.node.submitted');
if ($variables['display_submitted']) {
$variables['submitted'] = t('Submitted by !username on !datetime', array('!username' => $variables['name'], '!datetime' => $variables['date']));
if (theme_get_setting('features.node_user_picture')) {
// To change user picture settings (e.g. image style), edit the 'compact'
......@@ -708,7 +709,6 @@ function template_preprocess_node(&$variables) {
}
}
else {
$variables['display_submitted'] = FALSE;
$variables['submitted'] = '';
$variables['user_picture'] = '';
}
......
......@@ -282,6 +282,13 @@ protected function doArticleRdfaTests() {
* displayed in teaser view, so it is tested in the front page tests.
*/
protected function doPageRdfaTests() {
// The standard profile hides the created date on pages. Revert display to
// true for testing.
// @todo Clean-up standard profile defaults.
$node_type = entity_load('node_type', 'page');
$node_type->settings['node']['submitted'] = TRUE;
$node_type->save();
// Feed the HTML into the parser.
$uri_info = $this->page->uri();
$path = $uri_info['path'];
......
......@@ -9,10 +9,10 @@ settings:
node:
preview: '1'
options:
status: status
promote: promote
sticky: '0'
revision: '0'
submitted: '1'
status: true
promote: true
sticky: false
revision: false
submitted: true
status: '1'
langcode: en
......@@ -9,10 +9,10 @@ settings:
node:
preview: '1'
options:
status: status
promote: '0'
sticky: '0'
revision: '0'
submitted: '0'
status: true
promote: false
sticky: false
revision: false
submitted: false
status: '1'
langcode: en
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment