Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
D
drupal
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Custom Issue Tracker
Custom Issue Tracker
Labels
Merge Requests
304
Merge Requests
304
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
project
drupal
Commits
9d98cb98
Commit
9d98cb98
authored
Nov 13, 2012
by
catch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue
#1828528
by dawehner, xjm, tim.plunkett: Add language module integration for views.
parent
a13f7575
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
499 additions
and
15 deletions
+499
-15
core/modules/language/language.views.inc
core/modules/language/language.views.inc
+108
-0
core/modules/language/lib/Drupal/language/Plugin/views/argument/LanguageArgument.php
...rupal/language/Plugin/views/argument/LanguageArgument.php
+59
-0
core/modules/language/lib/Drupal/language/Plugin/views/field/LanguageField.php
.../lib/Drupal/language/Plugin/views/field/LanguageField.php
+50
-0
core/modules/language/lib/Drupal/language/Plugin/views/filter/LanguageFilter.php
...ib/Drupal/language/Plugin/views/filter/LanguageFilter.php
+37
-0
core/modules/views/lib/Drupal/views/Tests/Language/ArgumentLanguageTest.php
.../lib/Drupal/views/Tests/Language/ArgumentLanguageTest.php
+50
-0
core/modules/views/lib/Drupal/views/Tests/Language/FieldLanguageTest.php
...ews/lib/Drupal/views/Tests/Language/FieldLanguageTest.php
+45
-0
core/modules/views/lib/Drupal/views/Tests/Language/FilterLanguageTest.php
...ws/lib/Drupal/views/Tests/Language/FilterLanguageTest.php
+51
-0
core/modules/views/lib/Drupal/views/Tests/Language/LanguageTestBase.php
...iews/lib/Drupal/views/Tests/Language/LanguageTestBase.php
+86
-0
core/modules/views/views.module
core/modules/views/views.module
+13
-15
No files found.
core/modules/language/language.views.inc
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Provide views data and handlers for language.module.
*
* @ingroup views_module_handlers
*/
/**
* Implements hook_views_data().
*/
function
language_views_data
()
{
$data
[
'language'
][
'table'
][
'group'
]
=
t
(
'Language'
);
$data
[
'language'
][
'table'
][
'base'
]
=
array
(
'field'
=>
'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'
,
),
);
$data
[
'language'
][
'locked'
]
=
array
(
'title'
=>
t
(
'Locked'
),
'help'
=>
t
(
'A boolean indicating whether the administrator can edit or delete the language.'
),
'field'
=>
array
(
'id'
=>
'boolean'
,
),
'filter'
=>
array
(
'id'
=>
'boolean'
,
),
'argument'
=>
array
(
'id'
=>
'numeric'
,
),
'sort'
=>
array
(
'id'
=>
'standard'
,
),
);
return
$data
;
}
core/modules/language/lib/Drupal/language/Plugin/views/argument/LanguageArgument.php
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Contains Drupal\language\Plugin\views\argument\LanguageArgument.
*/
namespace
Drupal\language\Plugin\views\argument
;
use
Drupal\views\Plugin\views\argument\ArgumentPluginBase
;
use
Drupal\Core\Annotation\Plugin
;
/**
* Defines an argument handler to accept a language.
*
* @ingroup views_argument_handlers
*
* @Plugin(
* id = "language",
* module = "language"
* )
*/
class
LanguageArgument
extends
ArgumentPluginBase
{
/**
* Overrides \Drupal\views\Plugin\views\argument\ArgumentPluginBase::summary_name().
*
* Gets the user-friendly version of the language name.
*/
function
summary_name
(
$data
)
{
return
$this
->
language
(
$data
->
{
$this
->
name_alias
});
}
/**
* Overrides \Drupal\views\Plugin\views\argument\ArgumentPluginBase::summary_name().
*
* Gets the user friendly version of the language name for display as a
* title placeholder.
*/
function
title
()
{
return
$this
->
language
(
$this
->
argument
);
}
/**
* Returns the language name for a given langcode.
*
* @param string $langcode
* The language code.
*
* @return string
* The translated name for the language, or "Unknown language" if the
* language was not found.
*/
function
language
(
$langcode
)
{
$languages
=
views_language_list
();
return
isset
(
$languages
[
$langcode
])
?
$languages
[
$langcode
]
:
t
(
'Unknown language'
);
}
}
core/modules/language/lib/Drupal/language/Plugin/views/field/LanguageField.php
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Contains Drupal\language\Plugin\views\field\LanguageField.
*/
namespace
Drupal\language\Plugin\views\field
;
use
Drupal\views\Plugin\views\field\FieldPluginBase
;
use
Drupal\Core\Annotation\Plugin
;
/**
* Defines a field handler to translate a language into its readable form.
*
* @ingroup views_field_handlers
*
* @Plugin(
* id = "language",
* module = "language"
* )
*/
class
LanguageField
extends
FieldPluginBase
{
protected
function
defineOptions
()
{
$options
=
parent
::
defineOptions
();
$options
[
'native_language'
]
=
array
(
'default'
=>
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
:
''
;
}
}
core/modules/language/lib/Drupal/language/Plugin/views/filter/LanguageFilter.php
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Contains Drupal\language\Plugin\views\filter\LanguageFilter.
*/
namespace
Drupal\language\Plugin\views\filter
;
use
Drupal\views\Plugin\views\filter\InOperator
;
use
Drupal\Core\Annotation\Plugin
;
/**
* Provides filtering by language.
*
* @ingroup views_filter_handlers
*
* @Plugin(
* id = "language",
* module = "language"
* )
*/
class
LanguageFilter
extends
InOperator
{
function
get_value_options
()
{
if
(
!
isset
(
$this
->
value_options
))
{
$this
->
value_title
=
t
(
'Language'
);
$languages
=
array
(
'***CURRENT_LANGUAGE***'
=>
t
(
"Current user's language"
),
'***DEFAULT_LANGUAGE***'
=>
t
(
"Default site language"
),
);
$languages
=
array_merge
(
$languages
,
views_language_list
());
$this
->
value_options
=
$languages
;
}
}
}
core/modules/views/lib/Drupal/views/Tests/Language/ArgumentLanguageTest.php
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Contains Drupal\views\Tests\Language\ArgumentLanguageTest.
*/
namespace
Drupal\views\Tests\Language
;
use
Drupal\Core\Language\Language
;
/**
* Tests the argument language handler.
*
* @see Drupal\language\Plugin\views\argument\Language.php
*/
class
ArgumentLanguageTest
extends
LanguageTestBase
{
public
static
function
getInfo
()
{
return
array
(
'name'
=>
'Argument: Language'
,
'description'
=>
'Tests the argument language handler.'
,
'group'
=>
'Views Handlers'
);
}
/**
* Tests the language argument.
*/
public
function
testArgument
()
{
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
();
}
}
}
core/modules/views/lib/Drupal/views/Tests/Language/FieldLanguageTest.php
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Contains Drupal\views\Tests\Language\FieldLanguageTest.
*/
namespace
Drupal\views\Tests\Language
;
use
Drupal\Core\Language\Language
;
/**
* Tests the field language handler.
*
* @see Drupal\language\Plugin\views\field\Language
*/
class
FieldLanguageTest
extends
LanguageTestBase
{
public
static
function
getInfo
()
{
return
array
(
'name'
=>
'Field: Language'
,
'description'
=>
'Tests the field language handler.'
,
'group'
=>
'Views Handlers'
,
);
}
/**
* Tests the language field.
*/
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'
);
}
}
core/modules/views/lib/Drupal/views/Tests/Language/FilterLanguageTest.php
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Contains Drupal\views\Tests\Language\FilterLanguageTest.
*/
namespace
Drupal\views\Tests\Language
;
use
Drupal\Core\Language\Language
;
/**
* Tests the filter language handler.
*
* @see Drupal\language\Plugin\views\filter\Language
*/
class
FilterLanguageTest
extends
LanguageTestBase
{
public
static
function
getInfo
()
{
return
array
(
'name'
=>
'Filter: Language'
,
'description'
=>
'Tests the filter language handler.'
,
'group'
=>
'Views Handlers'
);
}
/**
* Tests the language filter.
*/
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
();
}
}
}
core/modules/views/lib/Drupal/views/Tests/Language/LanguageTestBase.php
0 → 100644
View file @
9d98cb98
<?php
/**
* @file
* Contains Drupal\views\Tests\Language\LanguageTestBase.
*/
namespace
Drupal\views\Tests\Language
;
use
Drupal\views\Tests\ViewTestBase
;
use
Drupal\Core\Language\Language
;
/**
* Defines the base class for all Language handler tests.
*/
abstract
class
LanguageTestBase
extends
ViewTestBase
{
/**
* Modules to enable.
*
* @var array
*/
public
static
$modules
=
array
(
'language'
);
protected
function
setUp
()
{
parent
::
setUp
();
$this
->
enableViewsTestModule
();
// Create another language beside English.
$language
=
new
Language
(
array
(
'langcode'
=>
'xx-lolspeak'
,
'name'
=>
'Lolspeak'
));
language_save
(
$language
);
}
/**
* Overrides \Drupal\views\Tests\ViewTestBase::schemaDefinition().
*/
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
;
}
/**
* Overrides \Drupal\views\Tests\ViewTestBase::schemaDefinition().
*/
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
;
}
/**
* Overrides \Drupal\views\Tests\ViewTestBase::dataSet().
*/
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
;
}
}
core/modules/views/views.module
View file @
9d98cb98
...
...
@@ -900,26 +900,24 @@ function views_add_contextual_links(&$render_element, $location, ViewExecutable
}
/**
*
Returns an array
of language names.
*
Prepares a list
of language names.
*
* This is a
one to one copy of locale_language_list because we can't rely on enabled locale module
.
* This is a
wrapper around language_list to return a plain key value array
.
*
* @param $field
* 'name' => names in current language, localized
* 'native' => native names
* @param $all
* Boolean to return all languages or only enabled ones
* @param string $field
* The field of the language object which should be used as the value of the
* array.
* @param int $flags
* (optional) Specifies the state of the languages that have to be returned.
* It can be: LANGUAGE_CONFIGURABLE, LANGUAGE_LOCKED, LANGUAGE_ALL.
*
* @return array
* An array of language names (or $field) keyed by the langcode.
*
* @see locale_language_list()
* @todo Figure out whether we need this with language module.
*/
function
views_language_list
(
$field
=
'name'
,
$all
=
FALSE
)
{
if
(
$all
)
{
$languages
=
language_list
();
}
else
{
$languages
=
language_list
();
}
function
views_language_list
(
$field
=
'name'
,
$flags
=
LANGUAGE_ALL
)
{
$languages
=
language_list
(
$flags
);
$list
=
array
();
foreach
(
$languages
as
$language
)
{
$list
[
$language
->
langcode
]
=
(
$field
==
'name'
)
?
t
(
$language
->
name
)
:
$language
->
$field
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment