Skip to content
Snippets Groups Projects
Commit cc7b115e authored by catch's avatar catch
Browse files

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
No related branches found
No related tags found
No related merge requests found
Showing
with 81 additions and 34 deletions
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment