diff --git a/core/modules/file/lib/Drupal/file/Plugin/views/field/Extension.php b/core/modules/file/lib/Drupal/file/Plugin/views/field/Extension.php index 9822cce..1663f04 100644 --- a/core/modules/file/lib/Drupal/file/Plugin/views/field/Extension.php +++ b/core/modules/file/lib/Drupal/file/Plugin/views/field/Extension.php @@ -3,6 +3,7 @@ /** * @file * Definition of views_handler_field_file_extension. + * @todo Test! */ namespace Drupal\file\Plugin\views\field; @@ -19,43 +20,43 @@ */ class Extension extends FieldPluginBase { + /** + * {@inheritdoc} + */ protected function defineOptions() { $options = parent::defineOptions(); - $options['fileextension_detect_tar'] = array('default' => FALSE, 'bool' => TRUE); + $options['extension_detect_tar'] = array('default' => FALSE, 'bool' => TRUE); return $options; } /** - * Default options form that provides the label widget that all fields - * should have. + * {@inheritdoc} */ public function buildOptionsForm(&$form, &$form_state) { parent::buildOptionsForm($form, $form_state); - $form['fileextension_detect_tar'] = array( + $form['extension_detect_tar'] = array( '#type' => 'checkbox', '#title' => t('Detect if tar is part of the extension'), - '#description' => t('Detect multiple tar extensions like tar.gz'), + '#description' => t("See if the previous extension is '.tar' and if so, add that, so we see 'tar.gz' or 'tar.bz2' instead of just 'gz'."), '#default_value' => $this->options['fileextension_max_extension_parts'], ); } function render($values) { - if (!$this->options['fileextension_detect_tar']) { - $value = $this->get_value($values); + $value = $this->get_value($values); + if (!$this->options['extension_detect_tar']) { if (preg_match('/\.([^\.]+)$/', $value, $match)) { return $this->sanitizeValue($match[1]); } } else { - $file_parts = explode('.', basename($this->get_value($values))); + $file_parts = explode('.', basename($value)); // If there is an extension. if (count($file_parts) > 1) { $extension = array_pop($file_parts); - // See if the previous extension is '.tar' and if so, add that, so we - // see 'tar.gz' or 'tar.bz2' instead of just 'gz'. $last_part_in_name = array_pop($file_parts); if ($last_part_in_name === 'tar') { - $extension = $last_part_in_name . '.' . $extension; + $extension = 'tar.' . $extension; } return $this->sanitizeValue($extension); } diff --git a/core/modules/file/lib/Drupal/file/Tests/ExtensionViewsFieldTest.php b/core/modules/file/lib/Drupal/file/Tests/ExtensionViewsFieldTest.php new file mode 100644 index 0000000..c2bd69c --- /dev/null +++ b/core/modules/file/lib/Drupal/file/Tests/ExtensionViewsFieldTest.php @@ -0,0 +1,80 @@ + 'Field: File extension', + 'description' => 'Test the core Drupal\file\Plugin\views\field\Extension handler.', + 'group' => 'Views Handlers', + ); + } + + function dataSet() { + $data = parent::dataSet(); + $data[0]['name'] = 'file.png'; + $data[1]['name'] = 'file.tar'; + $data[2]['name'] = 'file.tar.gz'; + $data[3]['name'] = 'file'; + + return $data; + } + + function viewsData() { + $data = parent::viewsData(); + $data['views_test_data']['name']['field']['id'] = 'file_extension'; + $data['views_test_data']['name']['real field'] = 'name'; + + return $data; + } + + public function testFieldExtension() { + $view = views_get_view('test_view'); + $view->setDisplay(); + + $view->displayHandlers->get('default')->overrideOption('fields', array( + 'name' => array( + 'id' => 'extension', + 'table' => 'views_test_data', + 'field' => 'name', + //'plugin_id' => 'file_extension', + ), + )); + + $this->executeView($view); + + // Test without the tar option. + $this->assertEqual($view->field['name']->advanced_render($view->result[0]), 'png'); + $this->assertEqual($view->field['name']->advanced_render($view->result[1]), 'tar'); + $this->assertEqual($view->field['name']->advanced_render($view->result[2]), 'gz'); + $this->assertEqual($view->field['name']->advanced_render($view->result[3]), ''); + // Test with the tar option. + $view->field['name']->options['extension_detect_tar'] = TRUE; + $this->assertEqual($view->field['name']->advanced_render($view->result[0]), 'png'); + $this->assertEqual($view->field['name']->advanced_render($view->result[1]), 'tar'); + $this->assertEqual($view->field['name']->advanced_render($view->result[2]), 'tar.gz'); + $this->assertEqual($view->field['name']->advanced_render($view->result[3]), ''); + } + +}