Update to Drupal 8.1.10. For more information, see https://www.drupal.org/project/drupal/releases/8.1.10
This commit is contained in:
parent
09b113657a
commit
2f563ab520
|
@ -81,7 +81,7 @@ class Drupal {
|
||||||
/**
|
/**
|
||||||
* The current system version.
|
* The current system version.
|
||||||
*/
|
*/
|
||||||
const VERSION = '8.1.9';
|
const VERSION = '8.1.10';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Core API compatibility.
|
* Core API compatibility.
|
||||||
|
|
|
@ -188,13 +188,16 @@ class DefaultExceptionSubscriber implements EventSubscriberInterface {
|
||||||
if (!method_exists($this, $method)) {
|
if (!method_exists($this, $method)) {
|
||||||
if ($exception instanceof HttpExceptionInterface) {
|
if ($exception instanceof HttpExceptionInterface) {
|
||||||
$this->onFormatUnknown($event);
|
$this->onFormatUnknown($event);
|
||||||
|
$response = $event->getResponse();
|
||||||
|
$response->headers->set('Content-Type', 'text/plain');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->onHtml($event);
|
$this->onHtml($event);
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
$this->$method($event);
|
else {
|
||||||
|
$this->$method($event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
namespace Drupal\comment;
|
namespace Drupal\comment;
|
||||||
|
|
||||||
|
use Drupal\Core\Access\AccessResult;
|
||||||
use Drupal\Core\Field\FieldItemList;
|
use Drupal\Core\Field\FieldItemList;
|
||||||
|
use Drupal\Core\Session\AccountInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a item list class for comment fields.
|
* Defines a item list class for comment fields.
|
||||||
|
@ -37,4 +39,28 @@ class CommentFieldItemList extends FieldItemList {
|
||||||
return parent::offsetExists($offset);
|
return parent::offsetExists($offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function access($operation = 'view', AccountInterface $account = NULL, $return_as_object = FALSE) {
|
||||||
|
if ($operation === 'edit') {
|
||||||
|
// Only users with administer comments permission can edit the comment
|
||||||
|
// status field.
|
||||||
|
$result = AccessResult::allowedIfHasPermission($account ?: \Drupal::currentUser(), 'administer comments');
|
||||||
|
return $return_as_object ? $result : $result->isAllowed();
|
||||||
|
}
|
||||||
|
if ($operation === 'view') {
|
||||||
|
// Only users with either post comments or access comments permisison can
|
||||||
|
// view the field value. The formatter,
|
||||||
|
// Drupal\comment\Plugin\Field\FieldFormatter\CommentDefaultFormatter,
|
||||||
|
// takes care of showing the thread and form based on individual
|
||||||
|
// permissions, so if a user only has ‘post comments’ access, only the
|
||||||
|
// form will be shown and not the comments.
|
||||||
|
$result = AccessResult::allowedIfHasPermission($account ?: \Drupal::currentUser(), 'access comments')
|
||||||
|
->orIf(AccessResult::allowedIfHasPermission($account ?: \Drupal::currentUser(), 'post comments'));
|
||||||
|
return $return_as_object ? $result : $result->isAllowed();
|
||||||
|
}
|
||||||
|
return parent::access($operation, $account, $return_as_object);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -384,6 +384,7 @@ class CommentNonNodeTest extends WebTestBase {
|
||||||
'administer entity_test fields',
|
'administer entity_test fields',
|
||||||
'view test entity',
|
'view test entity',
|
||||||
'administer entity_test content',
|
'administer entity_test content',
|
||||||
|
'administer comments',
|
||||||
));
|
));
|
||||||
$this->drupalLogin($limited_user);
|
$this->drupalLogin($limited_user);
|
||||||
$this->drupalGet('entity_test/structure/entity_test/fields/entity_test.entity_test.comment');
|
$this->drupalGet('entity_test/structure/entity_test/fields/entity_test.entity_test.comment');
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Drupal\Tests\comment\Functional;
|
||||||
|
|
||||||
|
|
||||||
|
use Drupal\comment\Tests\CommentTestTrait;
|
||||||
|
use Drupal\node\Entity\NodeType;
|
||||||
|
use Drupal\Tests\BrowserTestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests comment status field access.
|
||||||
|
*
|
||||||
|
* @group comment
|
||||||
|
*/
|
||||||
|
class CommentStatusFieldAccessTest extends BrowserTestBase {
|
||||||
|
|
||||||
|
use CommentTestTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public $profile = 'testing';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comment admin.
|
||||||
|
*
|
||||||
|
* @var \Drupal\user\UserInterface
|
||||||
|
*/
|
||||||
|
protected $commentAdmin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Node author.
|
||||||
|
*
|
||||||
|
* @var \Drupal\user\UserInterface
|
||||||
|
*/
|
||||||
|
protected $nodeAuthor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static $modules = [
|
||||||
|
'node',
|
||||||
|
'comment',
|
||||||
|
'user',
|
||||||
|
'system',
|
||||||
|
'text',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
$node_type = NodeType::create([
|
||||||
|
'type' => 'article',
|
||||||
|
'name' => t('Article'),
|
||||||
|
]);
|
||||||
|
$node_type->save();
|
||||||
|
$this->nodeAuthor = $this->drupalCreateUser([
|
||||||
|
'create article content',
|
||||||
|
'skip comment approval',
|
||||||
|
'post comments',
|
||||||
|
'edit own comments',
|
||||||
|
'access comments',
|
||||||
|
'administer nodes',
|
||||||
|
]);
|
||||||
|
$this->commentAdmin = $this->drupalCreateUser([
|
||||||
|
'administer comments',
|
||||||
|
'create article content',
|
||||||
|
'edit own comments',
|
||||||
|
'skip comment approval',
|
||||||
|
'post comments',
|
||||||
|
'access comments',
|
||||||
|
'administer nodes',
|
||||||
|
]);
|
||||||
|
$this->addDefaultCommentField('node', 'article');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests comment status field access.
|
||||||
|
*/
|
||||||
|
public function testCommentStatusFieldAccessStatus() {
|
||||||
|
$this->drupalLogin($this->nodeAuthor);
|
||||||
|
$this->drupalGet('node/add/article');
|
||||||
|
$assert = $this->assertSession();
|
||||||
|
$assert->fieldNotExists('comment[0][status]');
|
||||||
|
$this->submitForm([
|
||||||
|
'title[0][value]' => 'Node 1',
|
||||||
|
], t('Save and publish'));
|
||||||
|
$assert->fieldExists('subject[0][value]');
|
||||||
|
$this->drupalLogin($this->commentAdmin);
|
||||||
|
$this->drupalGet('node/add/article');
|
||||||
|
$assert->fieldExists('comment[0][status]');
|
||||||
|
$this->submitForm([
|
||||||
|
'title[0][value]' => 'Node 2',
|
||||||
|
], t('Save and publish'));
|
||||||
|
$assert->fieldExists('subject[0][value]');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -65,14 +65,17 @@ function config_file_download($uri) {
|
||||||
$scheme = file_uri_scheme($uri);
|
$scheme = file_uri_scheme($uri);
|
||||||
$target = file_uri_target($uri);
|
$target = file_uri_target($uri);
|
||||||
if ($scheme == 'temporary' && $target == 'config.tar.gz') {
|
if ($scheme == 'temporary' && $target == 'config.tar.gz') {
|
||||||
$request = \Drupal::request();
|
if (\Drupal::currentUser()->hasPermission('export configuration')) {
|
||||||
$date = DateTime::createFromFormat('U', $request->server->get('REQUEST_TIME'));
|
$request = \Drupal::request();
|
||||||
$date_string = $date->format('Y-m-d-H-i');
|
$date = DateTime::createFromFormat('U', $request->server->get('REQUEST_TIME'));
|
||||||
$hostname = str_replace('.', '-', $request->getHttpHost());
|
$date_string = $date->format('Y-m-d-H-i');
|
||||||
$filename = 'config' . '-' . $hostname . '-' . $date_string . '.tar.gz';
|
$hostname = str_replace('.', '-', $request->getHttpHost());
|
||||||
$disposition = 'attachment; filename="' . $filename . '"';
|
$filename = 'config' . '-' . $hostname . '-' . $date_string . '.tar.gz';
|
||||||
return array(
|
$disposition = 'attachment; filename="' . $filename . '"';
|
||||||
'Content-disposition' => $disposition,
|
return array(
|
||||||
);
|
'Content-disposition' => $disposition,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,12 @@ class ConfigExportUITest extends WebTestBase {
|
||||||
// Check the single export form doesn't have "form-required" elements.
|
// Check the single export form doesn't have "form-required" elements.
|
||||||
$this->drupalGet('admin/config/development/configuration/single/export');
|
$this->drupalGet('admin/config/development/configuration/single/export');
|
||||||
$this->assertNoRaw('js-form-required form-required', 'No form required fields are found.');
|
$this->assertNoRaw('js-form-required form-required', 'No form required fields are found.');
|
||||||
|
|
||||||
|
// Ensure the temporary file is not available to users without the
|
||||||
|
// permission.
|
||||||
|
$this->drupalLogout();
|
||||||
|
$this->drupalGet('system/temporary', ['query' => ['file' => 'config.tar.gz']]);
|
||||||
|
$this->assertResponse(403);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue