diff --git a/core/modules/language/language.views.inc b/core/modules/language/language.views.inc new file mode 100644 index 0000000..7521d52 --- /dev/null +++ b/core/modules/language/language.views.inc @@ -0,0 +1,91 @@ + 'langcode', + 'title' => t('Language'), + 'help' => t('A language used in drupal.'), + ); + + $data['language']['langcode'] = array( + 'title' => t('Language code'), + 'help' => t("Language code, e.g. 'de' or 'en-US'."), + 'field' => array( + 'id' => 'standard', + ), + 'filter' => array( + 'id' => 'string' + ), + 'argument' => array( + 'id' => 'string', + ), + 'sort' => array( + 'id' => 'standard', + ), + ); + + $data['language']['name'] = array( + 'title' => t('Language name'), + 'help' => t("Language name, e.g. 'German' or 'English'."), + 'field' => array( + 'id' => 'standard', + ), + 'filter' => array( + 'id' => 'string' + ), + 'argument' => array( + 'id' => 'string', + ), + 'sort' => array( + 'id' => 'standard', + ), + ); + + $data['language']['direction'] = array( + 'title' => t('Direction'), + 'help' => t('Direction of language (Left-to-Right = 0, Right-to-Left = 1).'), + 'field' => array( + 'id' => 'numeric', + ), + 'filter' => array( + 'id' => 'numeric' + ), + 'argument' => array( + 'id' => 'numeric', + ), + 'sort' => array( + 'id' => 'standard', + ), + ); + + $data['language']['weight'] = array( + 'title' => t('Weight'), + 'help' => t('Weight, used in lists of languages.'), + 'field' => array( + 'id' => 'numeric', + ), + 'filter' => array( + 'id' => 'numeric' + ), + 'argument' => array( + 'id' => 'numeric', + ), + 'sort' => array( + 'id' => 'standard', + ), + ); + + return $data; +} diff --git a/core/modules/language/lib/Drupal/language/Plugin/views/argument/Language.php b/core/modules/language/lib/Drupal/language/Plugin/views/argument/Language.php new file mode 100644 index 0000000..c24ee16 --- /dev/null +++ b/core/modules/language/lib/Drupal/language/Plugin/views/argument/Language.php @@ -0,0 +1,46 @@ +language($data->{$this->name_alias}); + } + + /** + * Override the behavior of title(). Get the user friendly version + * of the language. + */ + function title() { + return $this->language($this->argument); + } + + function language($langcode) { + $languages = views_language_list(); + return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language'); + } + +} diff --git a/core/modules/language/lib/Drupal/language/Plugin/views/field/Language.php b/core/modules/language/lib/Drupal/language/Plugin/views/field/Language.php new file mode 100644 index 0000000..e597027 --- /dev/null +++ b/core/modules/language/lib/Drupal/language/Plugin/views/field/Language.php @@ -0,0 +1,50 @@ + FALSE, 'bool' => TRUE); + + return $options; + } + + public function buildOptionsForm(&$form, &$form_state) { + parent::buildOptionsForm($form, $form_state); + $form['native_language'] = array( + '#title' => t('Native language'), + '#type' => 'checkbox', + '#default_value' => $this->options['native_language'], + '#description' => t('If enabled, the native name of the language will be displayed'), + ); + } + + function render($values) { + // @todo: Drupal Core dropped native language until config translation is + // ready, see http://drupal.org/node/1616594. + $value = $this->get_value($values); + $language = language_load($value); + return $language ? $language->name : ''; + } + +} diff --git a/core/modules/language/lib/Drupal/language/Plugin/views/filter/Language.php b/core/modules/language/lib/Drupal/language/Plugin/views/filter/Language.php new file mode 100644 index 0000000..ab836b3 --- /dev/null +++ b/core/modules/language/lib/Drupal/language/Plugin/views/filter/Language.php @@ -0,0 +1,38 @@ +value_options)) { + $this->value_title = t('Language'); + $languages = array( + '***CURRENT_LANGUAGE***' => t("Current user's language"), + '***DEFAULT_LANGUAGE***' => t("Default site language"), + LANGUAGE_NOT_SPECIFIED => t('No language') + ); + $languages = array_merge($languages, views_language_list()); + $this->value_options = $languages; + } + } + +} diff --git a/core/modules/views/lib/Drupal/views/Tests/Language/ArgumentLanguage.php b/core/modules/views/lib/Drupal/views/Tests/Language/ArgumentLanguage.php new file mode 100644 index 0000000..dfb088a --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/Language/ArgumentLanguage.php @@ -0,0 +1,47 @@ + 'Argument: Language', + 'description' => 'Tests the argument language handler.', + 'group' => 'Views Handlers' + ); + } + + public function testFilter() { + foreach (array('en' => 'John', 'xx-lolspeak' => 'George') as $langcode => $name) { + $view = $this->getView(); + $view->displayHandlers['default']->overrideOption('arguments', array( + 'langcode' => array( + 'id' => 'langcode', + 'table' => 'views_test_data', + 'field' => 'langcode', + ), + )); + $this->executeView($view, array($langcode)); + + $expected = array(array( + 'name' => $name, + )); + $this->assertIdenticalResultset($view, $expected, array('views_test_data_name' => 'name')); + $view->destroy(); + } + } + +} diff --git a/core/modules/views/lib/Drupal/views/Tests/Language/FieldLanguage.php b/core/modules/views/lib/Drupal/views/Tests/Language/FieldLanguage.php new file mode 100644 index 0000000..a738def --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/Language/FieldLanguage.php @@ -0,0 +1,42 @@ + 'Field: Language', + 'description' => 'Tests the field language handler.', + 'group' => 'Views Handlers', + ); + } + + public function testField() { + $view = $this->getView(); + $view->displayHandlers['default']->overrideOption('fields', array( + 'langcode' => array( + 'id' => 'langcode', + 'table' => 'views_test_data', + 'field' => 'langcode', + ), + )); + $this->executeView($view); + + $this->assertEqual($view->field['langcode']->advanced_render($view->result[0]), 'English'); + $this->assertEqual($view->field['langcode']->advanced_render($view->result[1]), 'Lolspeak'); + } + +} diff --git a/core/modules/views/lib/Drupal/views/Tests/Language/FilterLanguage.php b/core/modules/views/lib/Drupal/views/Tests/Language/FilterLanguage.php new file mode 100644 index 0000000..ed22f2e --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/Language/FilterLanguage.php @@ -0,0 +1,48 @@ + 'Filter: Language', + 'description' => 'Tests the filter language handler.', + 'group' => 'Views Handlers' + ); + } + + public function testFilter() { + foreach (array('en' => 'John', 'xx-lolspeak' => 'George') as $langcode => $name) { + $view = $this->getView(); + $view->displayHandlers['default']->overrideOption('filters', array( + 'langcode' => array( + 'id' => 'langcode', + 'table' => 'views_test_data', + 'field' => 'langcode', + 'value' => array($langcode), + ), + )); + $this->executeView($view); + + $expected = array(array( + 'name' => $name, + )); + $this->assertIdenticalResultset($view, $expected, array('views_test_data_name' => 'name')); + $view->destroy(); + } + } + +} diff --git a/core/modules/views/lib/Drupal/views/Tests/Language/LanguageTestBase.php b/core/modules/views/lib/Drupal/views/Tests/Language/LanguageTestBase.php new file mode 100644 index 0000000..5cd0bfd --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/Language/LanguageTestBase.php @@ -0,0 +1,78 @@ +enableViewsTestModule(); + + // Create another language beside english. + $language = new Language(array('langcode' => 'xx-lolspeak', 'name' => 'Lolspeak')); + language_save($language); + } + + + protected function schemaDefinition() { + $schema = parent::schemaDefinition(); + $schema['views_test_data']['fields']['langcode'] = array( + 'description' => 'The {language}.langcode of this beatle.', + 'type' => 'varchar', + 'length' => 12, + 'default' => '', + ); + + return $schema; + } + + protected function viewsData() { + $data = parent::viewsData(); + $data['views_test_data']['langcode'] = array( + 'title' => t('Langcode'), + 'help' => t('Langcode'), + 'field' => array( + 'id' => 'language', + ), + 'argument' => array( + 'id' => 'language', + ), + 'filter' => array( + 'id' => 'language', + ), + ); + + return $data; + } + + protected function dataSet() { + $data = parent::dataSet(); + $data[0]['langcode'] = 'en'; + $data[1]['langcode'] = 'xx-lolspeak'; + $data[2]['langcode'] = ''; + $data[3]['langcode'] = ''; + $data[4]['langcode'] = ''; + + return $data; + } + +}