upgrades core to 8.4.2

This commit is contained in:
Bachir Soussi Chiadmi
2017-11-14 16:09:54 +01:00
parent bd60eff9b3
commit c2b4e25be4
3504 changed files with 140306 additions and 38684 deletions
@@ -0,0 +1,116 @@
/**
* Attaches behaviors for the Tracker module's History module integration.
*
* May only be loaded for authenticated users, with the History module enabled.
*/
(function ($, Drupal, window) {
/**
* Render "new" and "updated" node indicators, as well as "X new" replies links.
*/
Drupal.behaviors.trackerHistory = {
attach(context) {
// Find all "new" comment indicator placeholders newer than 30 days ago that
// have not already been read after their last comment timestamp.
const nodeIDs = [];
const $nodeNewPlaceholders = $(context)
.find('[data-history-node-timestamp]')
.once('history')
.filter(function () {
const nodeTimestamp = parseInt(this.getAttribute('data-history-node-timestamp'), 10);
const nodeID = this.getAttribute('data-history-node-id');
if (Drupal.history.needsServerCheck(nodeID, nodeTimestamp)) {
nodeIDs.push(nodeID);
return true;
}
return false;
});
// Find all "new" comment indicator placeholders newer than 30 days ago that
// have not already been read after their last comment timestamp.
const $newRepliesPlaceholders = $(context)
.find('[data-history-node-last-comment-timestamp]')
.once('history')
.filter(function () {
const lastCommentTimestamp = parseInt(this.getAttribute('data-history-node-last-comment-timestamp'), 10);
const nodeTimestamp = parseInt(this.previousSibling.previousSibling.getAttribute('data-history-node-timestamp'), 10);
// Discard placeholders that have zero comments.
if (lastCommentTimestamp === nodeTimestamp) {
return false;
}
const nodeID = this.previousSibling.previousSibling.getAttribute('data-history-node-id');
if (Drupal.history.needsServerCheck(nodeID, lastCommentTimestamp)) {
if (nodeIDs.indexOf(nodeID) === -1) {
nodeIDs.push(nodeID);
}
return true;
}
return false;
});
if ($nodeNewPlaceholders.length === 0 && $newRepliesPlaceholders.length === 0) {
return;
}
// Fetch the node read timestamps from the server.
Drupal.history.fetchTimestamps(nodeIDs, () => {
processNodeNewIndicators($nodeNewPlaceholders);
processNewRepliesIndicators($newRepliesPlaceholders);
});
},
};
function processNodeNewIndicators($placeholders) {
const newNodeString = Drupal.t('new');
const updatedNodeString = Drupal.t('updated');
$placeholders.each((index, placeholder) => {
const timestamp = parseInt(placeholder.getAttribute('data-history-node-timestamp'), 10);
const nodeID = placeholder.getAttribute('data-history-node-id');
const lastViewTimestamp = Drupal.history.getLastRead(nodeID);
if (timestamp > lastViewTimestamp) {
const message = (lastViewTimestamp === 0) ? newNodeString : updatedNodeString;
$(placeholder).append(`<span class="marker">${message}</span>`);
}
});
}
function processNewRepliesIndicators($placeholders) {
// Figure out which placeholders need the "x new" replies links.
const placeholdersToUpdate = {};
$placeholders.each((index, placeholder) => {
const timestamp = parseInt(placeholder.getAttribute('data-history-node-last-comment-timestamp'), 10);
const nodeID = placeholder.previousSibling.previousSibling.getAttribute('data-history-node-id');
const lastViewTimestamp = Drupal.history.getLastRead(nodeID);
// Queue this placeholder's "X new" replies link to be downloaded from the
// server.
if (timestamp > lastViewTimestamp) {
placeholdersToUpdate[nodeID] = placeholder;
}
});
// Perform an AJAX request to retrieve node view timestamps.
const nodeIDs = Object.keys(placeholdersToUpdate);
if (nodeIDs.length === 0) {
return;
}
$.ajax({
url: Drupal.url('comments/render_new_comments_node_links'),
type: 'POST',
data: { 'node_ids[]': nodeIDs },
dataType: 'json',
success(results) {
for (const nodeID in results) {
if (results.hasOwnProperty(nodeID) && placeholdersToUpdate.hasOwnProperty(nodeID)) {
const url = results[nodeID].first_new_comment_link;
const text = Drupal.formatPlural(results[nodeID].new_comment_count, '1 new', '@count new');
$(placeholdersToUpdate[nodeID]).append(`<br /><a href="${url}">${text}</a>`);
}
}
},
});
}
}(jQuery, Drupal, window));
+37 -59
View File
@@ -1,64 +1,47 @@
/**
* Attaches behaviors for the Tracker module's History module integration.
*
* May only be loaded for authenticated users, with the History module enabled.
*/
* DO NOT EDIT THIS FILE.
* See the following change record for more information,
* https://www.drupal.org/node/2815083
* @preserve
**/
(function ($, Drupal, window) {
'use strict';
/**
* Render "new" and "updated" node indicators, as well as "X new" replies links.
*/
Drupal.behaviors.trackerHistory = {
attach: function (context) {
// Find all "new" comment indicator placeholders newer than 30 days ago that
// have not already been read after their last comment timestamp.
attach: function attach(context) {
var nodeIDs = [];
var $nodeNewPlaceholders = $(context)
.find('[data-history-node-timestamp]')
.once('history')
.filter(function () {
var nodeTimestamp = parseInt(this.getAttribute('data-history-node-timestamp'), 10);
var nodeID = this.getAttribute('data-history-node-id');
if (Drupal.history.needsServerCheck(nodeID, nodeTimestamp)) {
nodeIDs.push(nodeID);
return true;
}
else {
return false;
}
});
var $nodeNewPlaceholders = $(context).find('[data-history-node-timestamp]').once('history').filter(function () {
var nodeTimestamp = parseInt(this.getAttribute('data-history-node-timestamp'), 10);
var nodeID = this.getAttribute('data-history-node-id');
if (Drupal.history.needsServerCheck(nodeID, nodeTimestamp)) {
nodeIDs.push(nodeID);
return true;
}
// Find all "new" comment indicator placeholders newer than 30 days ago that
// have not already been read after their last comment timestamp.
var $newRepliesPlaceholders = $(context)
.find('[data-history-node-last-comment-timestamp]')
.once('history')
.filter(function () {
var lastCommentTimestamp = parseInt(this.getAttribute('data-history-node-last-comment-timestamp'), 10);
var nodeTimestamp = parseInt(this.previousSibling.previousSibling.getAttribute('data-history-node-timestamp'), 10);
// Discard placeholders that have zero comments.
if (lastCommentTimestamp === nodeTimestamp) {
return false;
return false;
});
var $newRepliesPlaceholders = $(context).find('[data-history-node-last-comment-timestamp]').once('history').filter(function () {
var lastCommentTimestamp = parseInt(this.getAttribute('data-history-node-last-comment-timestamp'), 10);
var nodeTimestamp = parseInt(this.previousSibling.previousSibling.getAttribute('data-history-node-timestamp'), 10);
if (lastCommentTimestamp === nodeTimestamp) {
return false;
}
var nodeID = this.previousSibling.previousSibling.getAttribute('data-history-node-id');
if (Drupal.history.needsServerCheck(nodeID, lastCommentTimestamp)) {
if (nodeIDs.indexOf(nodeID) === -1) {
nodeIDs.push(nodeID);
}
var nodeID = this.previousSibling.previousSibling.getAttribute('data-history-node-id');
if (Drupal.history.needsServerCheck(nodeID, lastCommentTimestamp)) {
if (nodeIDs.indexOf(nodeID) === -1) {
nodeIDs.push(nodeID);
}
return true;
}
else {
return false;
}
});
return true;
}
return false;
});
if ($nodeNewPlaceholders.length === 0 && $newRepliesPlaceholders.length === 0) {
return;
}
// Fetch the node read timestamps from the server.
Drupal.history.fetchTimestamps(nodeIDs, function () {
processNodeNewIndicators($nodeNewPlaceholders);
processNewRepliesIndicators($newRepliesPlaceholders);
@@ -76,28 +59,24 @@
var lastViewTimestamp = Drupal.history.getLastRead(nodeID);
if (timestamp > lastViewTimestamp) {
var message = (lastViewTimestamp === 0) ? newNodeString : updatedNodeString;
var message = lastViewTimestamp === 0 ? newNodeString : updatedNodeString;
$(placeholder).append('<span class="marker">' + message + '</span>');
}
});
}
function processNewRepliesIndicators($placeholders) {
// Figure out which placeholders need the "x new" replies links.
var placeholdersToUpdate = {};
$placeholders.each(function (index, placeholder) {
var timestamp = parseInt(placeholder.getAttribute('data-history-node-last-comment-timestamp'), 10);
var nodeID = placeholder.previousSibling.previousSibling.getAttribute('data-history-node-id');
var lastViewTimestamp = Drupal.history.getLastRead(nodeID);
// Queue this placeholder's "X new" replies link to be downloaded from the
// server.
if (timestamp > lastViewTimestamp) {
placeholdersToUpdate[nodeID] = placeholder;
}
});
// Perform an AJAX request to retrieve node view timestamps.
var nodeIDs = Object.keys(placeholdersToUpdate);
if (nodeIDs.length === 0) {
return;
@@ -105,9 +84,9 @@
$.ajax({
url: Drupal.url('comments/render_new_comments_node_links'),
type: 'POST',
data: {'node_ids[]': nodeIDs},
data: { 'node_ids[]': nodeIDs },
dataType: 'json',
success: function (results) {
success: function success(results) {
for (var nodeID in results) {
if (results.hasOwnProperty(nodeID) && placeholdersToUpdate.hasOwnProperty(nodeID)) {
var url = results[nodeID].first_new_comment_link;
@@ -118,5 +97,4 @@
}
});
}
})(jQuery, Drupal, window);
})(jQuery, Drupal, window);
@@ -6,6 +6,7 @@ source:
plugin: variable
variables:
- tracker_batch_size
source_module: tracker
process:
cron_index_limit: tracker_batch_size
destination:
@@ -9,7 +9,7 @@ use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
*
* @MigrateSource(
* id = "d7_tracker_node",
* source_provider = "tracker"
* source_module = "tracker"
* )
*/
class TrackerNode extends DrupalSqlBase {
@@ -9,7 +9,7 @@ use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
*
* @MigrateSource(
* id = "d7_tracker_user",
* source_provider = "tracker"
* source_module = "tracker"
* )
*/
class TrackerUser extends DrupalSqlBase {
@@ -2,6 +2,8 @@
namespace Drupal\tracker\Tests\Views;
@trigger_error(__NAMESPACE__ . '\TrackerTestBase is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\tracker\Functional\Views\TrackerTestBase', E_USER_DEPRECATED);
use Drupal\comment\Tests\CommentTestTrait;
use Drupal\Core\Language\LanguageInterface;
use Drupal\views\Tests\ViewTestBase;
@@ -10,6 +12,9 @@ use Drupal\comment\Entity\Comment;
/**
* Base class for all tracker tests.
*
* @deprecated Scheduled for removal in Drupal 9.0.0.
* Use \Drupal\Tests\tracker\Functional\Views\TrackerTestBase instead.
*/
abstract class TrackerTestBase extends ViewTestBase {
@@ -8,8 +8,8 @@ dependencies:
- tracker
- views
# Information added by Drupal.org packaging script on 2017-08-16
version: '8.3.7'
# Information added by Drupal.org packaging script on 2017-11-03
version: '8.4.2'
core: '8.x'
project: 'drupal'
datestamp: 1502903957
datestamp: 1509719929
@@ -9,8 +9,8 @@ use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
use Drupal\Core\Session\AccountInterface;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\node\Entity\Node;
use Drupal\system\Tests\Cache\AssertPageCacheContextsAndTagsTrait;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
/**
* Create and delete nodes and check for their display in the tracker listings.
@@ -0,0 +1,69 @@
<?php
namespace Drupal\Tests\tracker\Functional\Views;
use Drupal\comment\Tests\CommentTestTrait;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Tests\views\Functional\ViewTestBase;
use Drupal\views\Tests\ViewTestData;
use Drupal\comment\Entity\Comment;
/**
* Base class for all tracker tests.
*/
abstract class TrackerTestBase extends ViewTestBase {
use CommentTestTrait;
/**
* Modules to enable.
*
* @var array
*/
public static $modules = ['comment', 'tracker', 'tracker_test_views'];
/**
* The node used for testing.
*
* @var \Drupal\node\NodeInterface
*/
protected $node;
/**
* The comment used for testing.
*
* @var \Drupal\comment\CommentInterface
*/
protected $comment;
protected function setUp($import_test_views = TRUE) {
parent::setUp($import_test_views);
ViewTestData::createTestViews(get_class($this), ['tracker_test_views']);
$this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
// Add a comment field.
$this->addDefaultCommentField('node', 'page');
$permissions = ['access comments', 'create page content', 'post comments', 'skip comment approval'];
$account = $this->drupalCreateUser($permissions);
$this->drupalLogin($account);
$this->node = $this->drupalCreateNode([
'title' => $this->randomMachineName(8),
'uid' => $account->id(),
'status' => 1,
]);
$this->comment = Comment::create([
'entity_id' => $this->node->id(),
'entity_type' => 'node',
'field_name' => 'comment',
'subject' => $this->randomMachineName(),
'comment_body[' . LanguageInterface::LANGCODE_NOT_SPECIFIED . '][0][value]' => $this->randomMachineName(20),
]);
}
}
@@ -0,0 +1,68 @@
<?php
namespace Drupal\Tests\tracker\Functional\Views;
use Drupal\views\Views;
/**
* Tests the tracker user uid handlers.
*
* @group tracker
*/
class TrackerUserUidTest extends TrackerTestBase {
/**
* Views used by this test.
*
* @var array
*/
public static $testViews = ['test_tracker_user_uid'];
/**
* Tests the user uid filter and argument.
*/
public function testUserUid() {
$map = [
'nid' => 'nid',
'title' => 'title',
];
$expected = [
[
'nid' => $this->node->id(),
'title' => $this->node->label(),
]
];
$view = Views::getView('test_tracker_user_uid');
$this->executeView($view);
// We should have no results as the filter is set for uid 0.
$this->assertIdenticalResultSet($view, [], $map);
$view->destroy();
// Change the filter value to our user.
$view->initHandlers();
$view->filter['uid_touch_tracker']->value = $this->node->getOwnerId();
$this->executeView($view);
// We should have one result as the filter is set for the created user.
$this->assertIdenticalResultSet($view, $expected, $map);
$view->destroy();
// Remove the filter now, so only the argument will affect the query.
$view->removeHandler('default', 'filter', 'uid_touch_tracker');
// Test the incorrect argument UID.
$view->initHandlers();
$this->executeView($view, [rand()]);
$this->assertIdenticalResultSet($view, [], $map);
$view->destroy();
// Test the correct argument UID.
$view->initHandlers();
$this->executeView($view, [$this->node->getOwnerId()]);
$this->assertIdenticalResultSet($view, $expected, $map);
}
}
+3 -3
View File
@@ -8,8 +8,8 @@ package: Core
# version: VERSION
# core: 8.x
# Information added by Drupal.org packaging script on 2017-08-16
version: '8.3.7'
# Information added by Drupal.org packaging script on 2017-11-03
version: '8.4.2'
core: '8.x'
project: 'drupal'
datestamp: 1502903957
datestamp: 1509719929
+14 -4
View File
@@ -135,16 +135,21 @@ function tracker_cron() {
/**
* Access callback: Determines access permission for a user's own account.
*
* @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. As
* internal API, _tracker_user_access() may also be removed in a minor
* release.
*
* @internal
*
* @param \Drupal\Core\Session\AccountInterface $account
* The user account to track.
*
* @return bool
* TRUE if a user is accessing tracking info for their own account and
* has permission to access the content.
*
* @see tracker_menu()
*/
function _tracker_myrecent_access(AccountInterface $account) {
@trigger_error('_tracker_myrecent_access() is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0.', E_USER_DEPRECATED);
// This path is only allowed for authenticated users looking at their own content.
return $account->id() && (\Drupal::currentUser()->id() == $account->id()) && $account->hasPermission('access content');
}
@@ -152,16 +157,21 @@ function _tracker_myrecent_access(AccountInterface $account) {
/**
* Access callback: Determines access permission for an account.
*
* @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. As
* internal API, _tracker_user_access() may also be removed in a minor
* release.
*
* @internal
*
* @param int $account
* The user account ID to track.
*
* @return bool
* TRUE if a user has permission to access the account for $account and
* has permission to access the content.
*
* @see tracker_menu()
*/
function _tracker_user_access($account) {
@trigger_error('_tracker_user_access() is deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0.', E_USER_DEPRECATED);
return $account->access('view') && $account->hasPermission('access content');
}
-2
View File
@@ -19,8 +19,6 @@ use Drupal\node\Entity\Node;
*
* @return array
* A renderable array.
*
* @see tracker_menu()
*/
function tracker_page($account = NULL) {
if ($account) {