diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php index 2525071..58f1e0d 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php @@ -7,7 +7,10 @@ namespace Drupal\views\Plugin\views; +use Drupal\Component\Utility\String; use Drupal\Component\Utility\Unicode; +use Drupal\Component\Utility\UrlValidator; +use Drupal\Component\Utility\Xss; use Drupal\views\Plugin\views\display\DisplayPluginBase; use Drupal\views\Plugin\views\PluginBase; use Drupal\views\ViewExecutable; @@ -212,16 +215,16 @@ public function getField($field = NULL) { public function sanitizeValue($value, $type = NULL) { switch ($type) { case 'xss': - $value = filter_xss($value); + $value = Xss::filter($value); break; case 'xss_admin': - $value = filter_xss_admin($value); + $value = Xss::filterAdmin($value); break; case 'url': - $value = check_url($value); + $value = String::checkPlain(UrlValidator::stripDangerousProtocols($value)); break; default: - $value = check_plain($value); + $value = String::checkPlain($value); break; } return $value; diff --git a/core/modules/views/lib/Drupal/views/ViewExecutable.php b/core/modules/views/lib/Drupal/views/ViewExecutable.php index 9c6beeb..7e1f2d3 100644 --- a/core/modules/views/lib/Drupal/views/ViewExecutable.php +++ b/core/modules/views/lib/Drupal/views/ViewExecutable.php @@ -424,7 +424,10 @@ public function __construct(ViewStorageInterface $storage) { $this->storage->set('executable', $this); // Add the default css for a view. - $this->element['#attached']['css'][] = drupal_get_path('module', 'views') . '/css/views.module.css'; + // @todo Make views.module.css a library. + if (function_exists('drupal_get_path')) { + $this->element['#attached']['css'][] = drupal_get_path('module', 'views') . '/css/views.module.css'; + } } /** diff --git a/core/modules/views/tests/Drupal/views/Tests/Plugin/field/CounterTest.php b/core/modules/views/tests/Drupal/views/Tests/Plugin/field/CounterTest.php new file mode 100644 index 0000000..970fa46 --- /dev/null +++ b/core/modules/views/tests/Drupal/views/Tests/Plugin/field/CounterTest.php @@ -0,0 +1,139 @@ + 'Field: Counter (Unit)', + 'description' => 'Tests the \Drupal\views\Plugin\views\field\Counter handler.', + 'group' => 'Views Handlers', + ); + } + + /** + * Tests the getValue method(). + * + * @see \Drupal\views\Plugin\views\field\Counter::getValue() + */ + public function testGetValue() { + // Setup basic stuff like the view and the display. + $config = array(); + $config['display']['default'] = array( + 'id' => 'default', + 'display_plugin' => 'default', + 'display_title' => 'Default', + ); + $storage = new View($config, 'view'); + $view = $this->getMock('Drupal\views\ViewExecutable', NULL, array($storage)); + + $display = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase') + ->disableOriginalConstructor() + ->getMock(); + + $pager = $this->getMockBuilder('Drupal\views\Plugin\views\pager\Full') + ->disableOriginalConstructor() + ->setMethods(NULL) + ->getMock(); + + $values = ViewTestData::dataSet(); + $definition = array('title' => 'counter field', 'plugin_type' => 'field'); + $view->display_handler = $display; + $view->pager = $pager; + + $counter_handler = new Counter(array(), 'counter', $definition); + $options = array(); + $counter_handler->init($view, $display, $options); + + for ($i = 0; $i < 3; $i++) { + $view->row_index = $i; + $expected = $i + 1; + + $counter = $counter_handler->getValue($values[$i]); + $this->assertEquals($expected, $counter, String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + $counter = $counter_handler->render($values[$i]); + $this->assertEquals($expected, $counter_handler->render($values[$i]), String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + } + + // Setup a counter field with a random start. + $rand_start = rand(5, 10); + $counter_handler = new Counter(array(), 'counter', $definition); + $options = array( + 'counter_start' => $rand_start, + ); + $counter_handler->init($view, $display, $options); + + for ($i = 0; $i < 3; $i++) { + $view->row_index = $i; + $expected = $rand_start + $i; + + $counter = $counter_handler->getValue($values[$i]); + $this->assertEquals($expected, $counter, String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + $counter = $counter_handler->render($values[$i]); + $this->assertEquals($expected, $counter_handler->render($values[$i]), String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + } + + // Setup a counter field with a pager with a random offset. + $offset = 3; + $pager->setOffset($offset); + + $rand_start = rand(5, 10); + $counter_handler = new Counter(array(), 'counter', $definition); + $options = array( + 'counter_start' => $rand_start, + ); + $counter_handler->init($view, $display, $options); + + for ($i = 0; $i < 3; $i++) { + $view->row_index = $i; + $expected = $offset + $rand_start + $i; + + $counter = $counter_handler->getValue($values[$i]); + $this->assertEquals($expected, $counter, String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + $counter = $counter_handler->render($values[$i]); + $this->assertEquals($expected, $counter_handler->render($values[$i]), String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + } + + // Setup a pager on the second page. + $pager->setOffset($offset); + $items_per_page = 5; + $pager->set_items_per_page($items_per_page); + $current_page = 1; + $pager->setCurrentPage($current_page); + + $rand_start = rand(5, 10); + $counter_handler = new Counter(array(), 'counter', $definition); + $options = array( + 'counter_start' => $rand_start, + ); + $counter_handler->init($view, $display, $options); + + for ($i = 0; $i < 3; $i++) { + $view->row_index = $i; + $expected = $items_per_page + $offset + $rand_start + $i; + + $counter = $counter_handler->getValue($values[$i]); + $this->assertEquals($expected, $counter, String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + $counter = $counter_handler->render($values[$i]); + $this->assertEquals($expected, $counter_handler->render($values[$i]), String::format('The expected number (@expected) patches with the rendered number (@counter) failed', array('@expected' => $expected, '@counter' => $counter))); + } + } + +}