Issue #2969107 by raman.b, alexpott, matiasmiranda, L-four, kkalashnikov, catch, daffie, Lendude, xjm: 500 error on passing invalid month to MonthDate view argument handler
parent
68378465a3
commit
817b13d525
|
@ -24,7 +24,12 @@ class MonthDate extends Date {
|
|||
*/
|
||||
public function summaryName($data) {
|
||||
$month = str_pad($data->{$this->name_alias}, 2, '0', STR_PAD_LEFT);
|
||||
return $this->dateFormatter->format(strtotime("2005" . $month . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
|
||||
try {
|
||||
return $this->dateFormatter->format(strtotime("2005" . $month . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
|
||||
}
|
||||
catch (\InvalidArgumentException $e) {
|
||||
return parent::summaryName($data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -32,7 +37,12 @@ class MonthDate extends Date {
|
|||
*/
|
||||
public function title() {
|
||||
$month = str_pad($this->argument, 2, '0', STR_PAD_LEFT);
|
||||
return $this->dateFormatter->format(strtotime("2005" . $month . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
|
||||
try {
|
||||
return $this->dateFormatter->format(strtotime("2005" . $month . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
|
||||
}
|
||||
catch (\InvalidArgumentException $e) {
|
||||
return parent::title();
|
||||
}
|
||||
}
|
||||
|
||||
public function summaryArgument($data) {
|
||||
|
|
|
@ -0,0 +1,173 @@
|
|||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- node
|
||||
id: test_month_date_plugin
|
||||
label: 'Test Month Date Plugin'
|
||||
module: views
|
||||
description: ''
|
||||
tag: ''
|
||||
base_table: node_field_data
|
||||
base_field: nid
|
||||
display:
|
||||
default:
|
||||
display_plugin: default
|
||||
id: default
|
||||
display_title: Master
|
||||
position: 0
|
||||
display_options:
|
||||
access:
|
||||
type: none
|
||||
options: { }
|
||||
cache:
|
||||
type: tag
|
||||
options: { }
|
||||
query:
|
||||
type: views_query
|
||||
options:
|
||||
disable_sql_rewrite: false
|
||||
distinct: false
|
||||
replica: false
|
||||
query_comment: ''
|
||||
query_tags: { }
|
||||
exposed_form:
|
||||
type: basic
|
||||
options:
|
||||
submit_button: Apply
|
||||
reset_button: false
|
||||
reset_button_label: Reset
|
||||
exposed_sorts_label: 'Sort by'
|
||||
expose_sort_order: true
|
||||
sort_asc_label: Asc
|
||||
sort_desc_label: Desc
|
||||
pager:
|
||||
type: none
|
||||
options:
|
||||
offset: 0
|
||||
style:
|
||||
type: default
|
||||
options:
|
||||
grouping: { }
|
||||
row_class: ''
|
||||
default_row_class: true
|
||||
uses_fields: false
|
||||
row:
|
||||
type: fields
|
||||
options:
|
||||
inline: { }
|
||||
separator: ''
|
||||
hide_empty: false
|
||||
default_field_elements: true
|
||||
fields:
|
||||
title:
|
||||
id: title
|
||||
table: node_field_data
|
||||
field: title
|
||||
entity_type: node
|
||||
entity_field: title
|
||||
label: ''
|
||||
alter:
|
||||
alter_text: false
|
||||
make_link: false
|
||||
absolute: false
|
||||
trim: false
|
||||
word_boundary: false
|
||||
ellipsis: false
|
||||
strip_tags: false
|
||||
html: false
|
||||
hide_empty: false
|
||||
empty_zero: false
|
||||
settings:
|
||||
link_to_entity: true
|
||||
plugin_id: field
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
exclude: false
|
||||
element_type: ''
|
||||
element_class: ''
|
||||
element_label_type: ''
|
||||
element_label_class: ''
|
||||
element_label_colon: true
|
||||
element_wrapper_type: ''
|
||||
element_wrapper_class: ''
|
||||
element_default_classes: true
|
||||
empty: ''
|
||||
hide_alter_empty: true
|
||||
click_sort_column: value
|
||||
type: string
|
||||
group_column: value
|
||||
group_columns: { }
|
||||
group_rows: true
|
||||
delta_limit: 0
|
||||
delta_offset: 0
|
||||
delta_reversed: false
|
||||
delta_first_last: false
|
||||
multi_type: separator
|
||||
separator: ', '
|
||||
field_api_classes: false
|
||||
filters: { }
|
||||
sorts: { }
|
||||
header: { }
|
||||
footer: { }
|
||||
empty: { }
|
||||
relationships: { }
|
||||
arguments:
|
||||
created_month:
|
||||
id: created_month
|
||||
table: node_field_data
|
||||
field: created_month
|
||||
relationship: none
|
||||
group_type: group
|
||||
admin_label: ''
|
||||
default_action: default
|
||||
exception:
|
||||
value: all
|
||||
title_enable: false
|
||||
title: All
|
||||
title_enable: false
|
||||
title: ''
|
||||
default_argument_type: query_parameter
|
||||
default_argument_options:
|
||||
query_param: month
|
||||
fallback: all
|
||||
multiple: or
|
||||
default_argument_skip_url: false
|
||||
summary_options:
|
||||
base_path: ''
|
||||
count: true
|
||||
items_per_page: 25
|
||||
override: false
|
||||
summary:
|
||||
sort_order: asc
|
||||
number_of_records: 0
|
||||
format: default_summary
|
||||
specify_validation: false
|
||||
validate:
|
||||
type: none
|
||||
fail: 'not found'
|
||||
validate_options: { }
|
||||
entity_type: node
|
||||
plugin_id: date_month
|
||||
display_extenders: { }
|
||||
cache_metadata:
|
||||
max-age: -1
|
||||
contexts:
|
||||
- url
|
||||
- 'user.node_grants:view'
|
||||
tags: { }
|
||||
page_1:
|
||||
display_plugin: page
|
||||
id: page_1
|
||||
display_title: Page
|
||||
position: 1
|
||||
display_options:
|
||||
display_extenders: { }
|
||||
path: test-month-date-plugin
|
||||
cache_metadata:
|
||||
max-age: -1
|
||||
contexts:
|
||||
- url
|
||||
- 'user.node_grants:view'
|
||||
tags: { }
|
|
@ -0,0 +1,101 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\views\Functional\Plugin;
|
||||
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\Tests\views\Functional\ViewTestBase;
|
||||
|
||||
/**
|
||||
* Tests the Month Date Plugin.
|
||||
*
|
||||
* @group views
|
||||
*/
|
||||
class MonthDatePluginTest extends ViewTestBase {
|
||||
|
||||
/**
|
||||
* Views used by this test.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $testViews = ['test_month_date_plugin'];
|
||||
|
||||
/**
|
||||
* Modules to enable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $modules = ['node'];
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $defaultTheme = 'stark';
|
||||
|
||||
/**
|
||||
* Test node 1.
|
||||
*
|
||||
* @var \Drupal\node\NodeInterface
|
||||
*/
|
||||
protected $node1;
|
||||
|
||||
/**
|
||||
* Test node 2.
|
||||
*
|
||||
* @var \Drupal\node\NodeInterface
|
||||
*/
|
||||
protected $node2;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setUp($import_test_views = TRUE): void {
|
||||
parent::setUp($import_test_views);
|
||||
$date1 = '2020-10-01 00:00:00';
|
||||
$this->node1 = $this->drupalCreateNode(['created' => strtotime($date1)]);
|
||||
$date2 = '2020-11-01 00:00:00';
|
||||
$this->node2 = $this->drupalCreateNode(['created' => strtotime($date2)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the Month Date Plugin.
|
||||
*/
|
||||
public function testMonthDatePlugin() {
|
||||
$assert_session = $this->assertSession();
|
||||
|
||||
// Test fallback value.
|
||||
$this->drupalGet('test-month-date-plugin');
|
||||
$assert_session->statusCodeEquals(200);
|
||||
$assert_session->pageTextContains($this->node1->getTitle());
|
||||
$assert_session->pageTextContains($this->node2->getTitle());
|
||||
|
||||
// Test 'all' values.
|
||||
$this->drupalGet('test-month-date-plugin/all');
|
||||
$assert_session->statusCodeEquals(200);
|
||||
$assert_session->pageTextContains($this->node1->getTitle());
|
||||
$assert_session->pageTextContains($this->node2->getTitle());
|
||||
|
||||
// Test valid month value.
|
||||
$this->drupalGet('test-month-date-plugin/10');
|
||||
$assert_session->statusCodeEquals(200);
|
||||
$assert_session->pageTextContains($this->node1->getTitle());
|
||||
$assert_session->pageTextNotContains($this->node2->getTitle());
|
||||
|
||||
// Test query parameter.
|
||||
$url = Url::fromUserInput('/test-month-date-plugin', [
|
||||
'query' => [
|
||||
'month' => 10,
|
||||
],
|
||||
]);
|
||||
$this->drupalGet($url);
|
||||
$assert_session->statusCodeEquals(200);
|
||||
$assert_session->pageTextContains($this->node1->getTitle());
|
||||
$assert_session->pageTextNotContains($this->node2->getTitle());
|
||||
|
||||
// Test invalid month name.
|
||||
$this->drupalGet('test-month-date-plugin/invalid-month');
|
||||
$assert_session->statusCodeEquals(200);
|
||||
$assert_session->pageTextNotContains($this->node1->getTitle());
|
||||
$assert_session->pageTextNotContains($this->node2->getTitle());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue