Issue #1793696 by dawehner, damiankloip: Fixed views_preprocess_node() check for the wrong row_plugin().
parent
8a0160034a
commit
509cb25357
|
@ -0,0 +1,170 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\node\Tests\Views\RowPluginTest.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\node\Tests\Views;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the node row plugin.
|
||||||
|
*
|
||||||
|
* @see \Drupal\node\Plugin\views\row\NodeRow
|
||||||
|
*/
|
||||||
|
class RowPluginTest extends NodeTestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modules to enable.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public static $modules = array('node', 'comment');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Views used by this test.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public static $testViews = array('test_node_row_plugin');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains all comments keyed by node used by the test.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $comments;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains all nodes used by this test.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $nodes;
|
||||||
|
|
||||||
|
public static function getInfo() {
|
||||||
|
return array(
|
||||||
|
'name' => 'Node: Row plugin',
|
||||||
|
'description' => 'Tests the node row plugin.',
|
||||||
|
'group' => 'Views module integration',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->drupalCreateContentType(array('type' => 'article'));
|
||||||
|
|
||||||
|
// Create two nodes, with 5 comments on all of them.
|
||||||
|
for ($i = 0; $i < 2; $i++) {
|
||||||
|
$this->nodes[] = $this->drupalCreateNode(
|
||||||
|
array(
|
||||||
|
'type' => 'article',
|
||||||
|
'body' => array(
|
||||||
|
array(
|
||||||
|
'value' => $this->randomName(42),
|
||||||
|
'format' => filter_default_format(),
|
||||||
|
'summary' => $this->randomName(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->nodes as $node) {
|
||||||
|
for ($i = 0; $i < 5; $i++) {
|
||||||
|
$this->comments[$node->id()][] = $this->drupalCreateComment(array('nid' => $node->id()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to create a random comment.
|
||||||
|
*
|
||||||
|
* @param array $settings
|
||||||
|
* (optional) An associative array of settings for the comment, as used in
|
||||||
|
* entity_create().
|
||||||
|
*
|
||||||
|
* @return \Drupal\comment\Plugin\Core\Entity\Comment
|
||||||
|
* Returns the created and saved comment.
|
||||||
|
*/
|
||||||
|
public function drupalCreateComment(array $settings = array()) {
|
||||||
|
$node = node_load($settings['nid']);
|
||||||
|
$settings += array(
|
||||||
|
'subject' => $this->randomName(),
|
||||||
|
'node_type' => "comment_node_{$node->bundle()}",
|
||||||
|
'comment_body' => $this->randomName(40),
|
||||||
|
);
|
||||||
|
|
||||||
|
$comment = entity_create('comment', $settings);
|
||||||
|
$comment->save();
|
||||||
|
return $comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the node row plugin.
|
||||||
|
*/
|
||||||
|
public function testRowPlugin() {
|
||||||
|
$view = views_get_view('test_node_row_plugin');
|
||||||
|
$view->initDisplay();
|
||||||
|
$view->setDisplay('page_1');
|
||||||
|
$view->initStyle();
|
||||||
|
$view->rowPlugin->options['view_mode'] = 'full';
|
||||||
|
|
||||||
|
// Test with view_mode full.
|
||||||
|
$output = $view->preview();
|
||||||
|
foreach ($this->nodes as $node) {
|
||||||
|
$body = $node->body;
|
||||||
|
$teaser = $body[LANGUAGE_NOT_SPECIFIED][0]['summary'];
|
||||||
|
$full = $body[LANGUAGE_NOT_SPECIFIED][0]['value'];
|
||||||
|
$this->assertFalse(strpos($output, $teaser) !== FALSE, 'Make sure the teaser appears in the output of the view.');
|
||||||
|
$this->assertTrue(strpos($output, $full) !== FALSE, 'Make sure the full text appears in the output of the view.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test with teasers.
|
||||||
|
$view->rowPlugin->options['view_mode'] = 'teaser';
|
||||||
|
$output = $view->preview();
|
||||||
|
foreach ($this->nodes as $node) {
|
||||||
|
$body = $node->body;
|
||||||
|
$teaser = $body[LANGUAGE_NOT_SPECIFIED][0]['summary'];
|
||||||
|
$full = $body[LANGUAGE_NOT_SPECIFIED][0]['value'];
|
||||||
|
$this->assertTrue(strpos($output, $teaser) !== FALSE, 'Make sure the teaser appears in the output of the view.');
|
||||||
|
$this->assertFalse(strpos($output, $full) !== FALSE, 'Make sure the full text does not appears in the output of the view if teaser is set as viewmode.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test with links disabled.
|
||||||
|
$view->rowPlugin->options['links'] = FALSE;
|
||||||
|
$output = $view->preview();
|
||||||
|
$this->drupalSetContent($output);
|
||||||
|
foreach ($this->nodes as $node) {
|
||||||
|
$this->assertFalse($this->xpath('//li[contains(@class, :class)]/a[contains(@href, :href)]', array(':class' => 'node-readmore', ':href' => "node/{$node->id()}")), 'Make sure no readmore link appears.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test with links enabled.
|
||||||
|
$view->rowPlugin->options['links'] = TRUE;
|
||||||
|
$output = $view->preview();
|
||||||
|
$this->drupalSetContent($output);
|
||||||
|
foreach ($this->nodes as $node) {
|
||||||
|
$this->assertTrue($this->xpath('//li[contains(@class, :class)]/a[contains(@href, :href)]', array(':class' => 'node-readmore', ':href' => "node/{$node->id()}")), 'Make sure no readmore link appears.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test with comments enabled.
|
||||||
|
$view->rowPlugin->options['comments'] = TRUE;
|
||||||
|
$output = $view->preview();
|
||||||
|
foreach ($this->nodes as $node) {
|
||||||
|
foreach ($this->comments[$node->id()] as $comment) {
|
||||||
|
$this->assertTrue(strpos($output, $comment->comment_body->value) !== FALSE, 'Make sure the comment appears in the output.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test with comments disabled.
|
||||||
|
$view->rowPlugin->options['comments'] = FALSE;
|
||||||
|
$output = $view->preview();
|
||||||
|
foreach ($this->nodes as $node) {
|
||||||
|
foreach ($this->comments[$node->id()] as $comment) {
|
||||||
|
$this->assertFalse(strpos($output, $comment->comment_body->value) !== FALSE, 'Make sure the comment does not appears in the output when the comments option disabled.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
base_field: nid
|
||||||
|
base_table: node
|
||||||
|
core: 8
|
||||||
|
description: ''
|
||||||
|
status: '1'
|
||||||
|
display:
|
||||||
|
default:
|
||||||
|
display_options:
|
||||||
|
access:
|
||||||
|
type: perm
|
||||||
|
cache:
|
||||||
|
type: none
|
||||||
|
exposed_form:
|
||||||
|
type: basic
|
||||||
|
filters:
|
||||||
|
status:
|
||||||
|
expose:
|
||||||
|
operator: '0'
|
||||||
|
field: status
|
||||||
|
group: '1'
|
||||||
|
id: status
|
||||||
|
table: node
|
||||||
|
value: '1'
|
||||||
|
plugin_id: boolean
|
||||||
|
pager:
|
||||||
|
options:
|
||||||
|
items_per_page: '10'
|
||||||
|
type: full
|
||||||
|
query:
|
||||||
|
type: views_query
|
||||||
|
row:
|
||||||
|
options:
|
||||||
|
build_mode: teaser
|
||||||
|
comments: '0'
|
||||||
|
links: '1'
|
||||||
|
type: node
|
||||||
|
sorts: { }
|
||||||
|
style:
|
||||||
|
type: default
|
||||||
|
title: test_node_row_plugin
|
||||||
|
display_plugin: default
|
||||||
|
display_title: Master
|
||||||
|
id: default
|
||||||
|
position: { }
|
||||||
|
page_1:
|
||||||
|
display_options:
|
||||||
|
path: test-node-row-plugin
|
||||||
|
display_plugin: page
|
||||||
|
display_title: Page
|
||||||
|
id: page_1
|
||||||
|
position: { }
|
||||||
|
human_name: test_node_row_plugin
|
||||||
|
langcode: en
|
||||||
|
module: views
|
||||||
|
id: test_node_row_plugin
|
||||||
|
tag: default
|
|
@ -236,6 +236,7 @@ function views_plugin_list() {
|
||||||
* node portion of the theme registry.
|
* node portion of the theme registry.
|
||||||
*/
|
*/
|
||||||
function views_preprocess_node(&$vars) {
|
function views_preprocess_node(&$vars) {
|
||||||
|
module_load_include('inc', 'node', 'node.views');
|
||||||
// The 'view' attribute of the node is added in views_preprocess_node()
|
// The 'view' attribute of the node is added in views_preprocess_node()
|
||||||
if (!empty($vars['node']->view) && $vars['node']->view->storage->id()) {
|
if (!empty($vars['node']->view) && $vars['node']->view->storage->id()) {
|
||||||
$vars['view'] = $vars['node']->view;
|
$vars['view'] = $vars['node']->view;
|
||||||
|
@ -252,7 +253,7 @@ function views_preprocess_node(&$vars) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allow to alter comments and links based on the settings in the row plugin.
|
// Allow to alter comments and links based on the settings in the row plugin.
|
||||||
if (!empty($vars['view']->style_plugin->row_plugin) && get_class($vars['view']->style_plugin->row_plugin) == 'views_plugin_row_node_view') {
|
if (!empty($vars['view']->rowPlugin) && $vars['view']->rowPlugin->getPluginId() == 'node') {
|
||||||
node_row_node_view_preprocess_node($vars);
|
node_row_node_view_preprocess_node($vars);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue