Mock module for language layer tests.
<?php
/**
* @file
* Mock module for language layer tests.
*/
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Drupal\Core\Language\Language;
/**
* Implements hook_page_build().
*/
function language_test_page_build() {
language_test_store_language_negotiation();
if (isset(language(Language::TYPE_INTERFACE)->langcode) && isset(language(Language::TYPE_INTERFACE)->method_id)) {
drupal_set_message(t('Language negotiation method: @name', array(
'@name' => language(Language::TYPE_INTERFACE)->method_id,
)));
}
}
/**
* Implements hook_language_types_info().
*/
function language_test_language_types_info() {
if (Drupal::state()
->get('language_test.language_types')) {
return array(
'test_language_type' => array(
'name' => t('Test'),
'description' => t('A test language type.'),
),
'fixed_test_language_type' => array(
'fixed' => array(
'test_language_negotiation_method',
),
),
);
}
}
/**
* Implements hook_language_types_info_alter().
*/
function language_test_language_types_info_alter(array &$language_types) {
if (Drupal::state()
->get('language_test.content_language_type')) {
unset($language_types[Language::TYPE_CONTENT]['fixed']);
}
}
/**
* Implements hook_language_negotiation_info().
*/
function language_test_language_negotiation_info() {
if (Drupal::state()
->get('language_test.language_negotiation_info')) {
$info = array(
'callbacks' => array(
'negotiation' => 'language_test_language_negotiation_method',
),
'file' => drupal_get_path('module', 'language_test') . '/language_test.module',
'weight' => -10,
'description' => t('This is a test language negotiation method.'),
);
return array(
'test_language_negotiation_method' => array(
'name' => t('Test'),
'types' => array(
Language::TYPE_CONTENT,
'test_language_type',
'fixed_test_language_type',
),
) + $info,
'test_language_negotiation_method_ts' => array(
'name' => t('Type-specific test'),
'types' => array(
'test_language_type',
),
) + $info,
);
}
}
/**
* Implements hook_language_negotiation_info_alter().
*/
function language_test_language_negotiation_info_alter(array &$negotiation_info) {
if (Drupal::state()
->get('language_test.language_negotiation_info_alter')) {
unset($negotiation_info[LANGUAGE_NEGOTIATION_INTERFACE]);
}
}
/**
* Store the last negotiated languages.
*/
function language_test_store_language_negotiation() {
$last = array();
foreach (language_types_get_all() as $type) {
$last[$type] = language($type)->langcode;
}
Drupal::state()
->set('language_test.language_negotiation_last', $last);
}
/**
* Provides a test language negotiation method.
*/
function language_test_language_negotiation_method($languages) {
return 'it';
}
/**
* Implements hook_menu().
*/
function language_test_menu() {
$items = array();
$items['language_test/subrequest'] = array(
'page callback' => 'language_test_subrequest',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Page callback. Uses a subrequest to retrieve the 'user' page.
*/
function language_test_subrequest() {
$request = Request::createFromGlobals();
$server = $request->server
->all();
if (basename($server['SCRIPT_FILENAME']) != basename($server['SCRIPT_NAME'])) {
// We need this for when the test is executed by run-tests.sh.
// @todo Remove this once run-tests.sh has been converted to use a Request
// object.
$server['SCRIPT_FILENAME'] = $server['SCRIPT_NAME'];
$base_path = ltrim($server['REQUEST_URI'], '/');
}
else {
$base_path = $request
->getBasePath();
}
$subrequest = Request::create($base_path . '/user', 'GET', $request->query
->all(), $request->cookies
->all(), array(), $server);
return Drupal::service('http_kernel')
->handle($subrequest, HttpKernelInterface::SUB_REQUEST);
}
Name | Description |
---|---|
language_test_language_negotiation_info | Implements hook_language_negotiation_info(). |
language_test_language_negotiation_info_alter | Implements hook_language_negotiation_info_alter(). |
language_test_language_negotiation_method | Provides a test language negotiation method. |
language_test_language_types_info | Implements hook_language_types_info(). |
language_test_language_types_info_alter | Implements hook_language_types_info_alter(). |
language_test_menu | Implements hook_menu(). |
language_test_page_build | Implements hook_page_build(). |
language_test_store_language_negotiation | Store the last negotiated languages. |
language_test_subrequest | Page callback. Uses a subrequest to retrieve the 'user' page. |