Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 102 |
TranslateFormBase | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
506 | |
0.00% |
0 / 102 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
translateFilterLoadStrings | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 22 |
|||
translateFilterValues | |
0.00% |
0 / 1 |
110 | |
0.00% |
0 / 21 |
|||
translateFilters | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 49 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\locale\Form\TranslateFormBase. | |
*/ | |
namespace Drupal\locale\Form; | |
use Drupal\Core\Form\FormBase; | |
use Drupal\Core\Language\LanguageManagerInterface; | |
use Drupal\locale\StringStorageInterface; | |
use Drupal\Core\State\StateInterface; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
/** | |
* Defines the locale user interface translation form base. | |
* | |
* Provides methods for searching and filtering strings. | |
*/ | |
abstract class TranslateFormBase extends FormBase { | |
/** | |
* The locale storage. | |
* | |
* @var \Drupal\locale\StringStorageInterface | |
*/ | |
protected $localeStorage; | |
/** | |
* The state store. | |
* | |
* @var \Drupal\Core\State\StateInterface | |
*/ | |
protected $state; | |
/** | |
* The language manager. | |
* | |
* @var \Drupal\Core\Language\LanguageManagerInterface | |
*/ | |
protected $languageManager; | |
/* | |
* Filter values. Shared between objects that inherit this class. | |
* | |
* @var array|null | |
*/ | |
protected static $filterValues; | |
/** | |
* Constructs a new TranslationFormBase object. | |
* | |
* @param \Drupal\locale\StringStorageInterface $locale_storage | |
* The locale storage. | |
* @param \Drupal\Core\State\StateInterface $state | |
* The state service. | |
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
* The language manager. | |
*/ | |
public function __construct(StringStorageInterface $locale_storage, StateInterface $state, LanguageManagerInterface $language_manager) { | |
$this->localeStorage = $locale_storage; | |
$this->state = $state; | |
$this->languageManager = $language_manager; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container) { | |
return new static( | |
$container->get('locale.storage'), | |
$container->get('state'), | |
$container->get('language_manager') | |
); | |
} | |
/** | |
* Builds a string search query and returns an array of string objects. | |
* | |
* @return \Drupal\locale\TranslationString[] | |
* Array of \Drupal\locale\TranslationString objects. | |
*/ | |
protected function translateFilterLoadStrings() { | |
$filter_values = $this->translateFilterValues(); | |
// Language is sanitized to be one of the possible options in | |
// translateFilterValues(). | |
$conditions = array('language' => $filter_values['langcode']); | |
$options = array('pager limit' => 30, 'translated' => TRUE, 'untranslated' => TRUE); | |
// Add translation status conditions and options. | |
switch ($filter_values['translation']) { | |
case 'translated': | |
$conditions['translated'] = TRUE; | |
if ($filter_values['customized'] != 'all') { | |
$conditions['customized'] = $filter_values['customized']; | |
} | |
break; | |
case 'untranslated': | |
$conditions['translated'] = FALSE; | |
break; | |
} | |
if (!empty($filter_values['string'])) { | |
$options['filters']['source'] = $filter_values['string']; | |
if ($options['translated']) { | |
$options['filters']['translation'] = $filter_values['string']; | |
} | |
} | |
return $this->localeStorage->getTranslations($conditions, $options); | |
} | |
/** | |
* Builds an array out of search criteria specified in request variables. | |
* | |
* @param bool $reset | |
* If the list of values should be reset. | |
* | |
* @return array | |
* The filter values. | |
*/ | |
protected function translateFilterValues($reset = FALSE) { | |
if (!$reset && static::$filterValues) { | |
return static::$filterValues; | |
} | |
$filter_values = array(); | |
$filters = $this->translateFilters(); | |
foreach ($filters as $key => $filter) { | |
$filter_values[$key] = $filter['default']; | |
// Let the filter defaults be overwritten by parameters in the URL. | |
if ($this->getRequest()->query->has($key)) { | |
// Only allow this value if it was among the options, or | |
// if there were no fixed options to filter for. | |
$value = $this->getRequest()->query->get($key); | |
if (!isset($filter['options']) || isset($filter['options'][$value])) { | |
$filter_values[$key] = $value; | |
} | |
} | |
elseif (isset($_SESSION['locale_translate_filter'][$key])) { | |
// Only allow this value if it was among the options, or | |
// if there were no fixed options to filter for. | |
if (!isset($filter['options']) || isset($filter['options'][$_SESSION['locale_translate_filter'][$key]])) { | |
$filter_values[$key] = $_SESSION['locale_translate_filter'][$key]; | |
} | |
} | |
} | |
return static::$filterValues = $filter_values; | |
} | |
/** | |
* Lists locale translation filters that can be applied. | |
*/ | |
protected function translateFilters() { | |
$filters = array(); | |
// Get all languages, except English. | |
$this->languageManager->reset(); | |
$languages = $this->languageManager->getLanguages(); | |
$language_options = array(); | |
foreach ($languages as $langcode => $language) { | |
if (locale_is_translatable($langcode)) { | |
$language_options[$langcode] = $language->getName(); | |
} | |
} | |
// Pick the current interface language code for the filter. | |
$default_langcode = $this->languageManager->getCurrentLanguage()->getId(); | |
if (!isset($language_options[$default_langcode])) { | |
$available_langcodes = array_keys($language_options); | |
$default_langcode = array_shift($available_langcodes); | |
} | |
$filters['string'] = array( | |
'title' => $this->t('String contains'), | |
'description' => $this->t('Leave blank to show all strings. The search is case sensitive.'), | |
'default' => '', | |
); | |
$filters['langcode'] = array( | |
'title' => $this->t('Translation language'), | |
'options' => $language_options, | |
'default' => $default_langcode, | |
); | |
$filters['translation'] = array( | |
'title' => $this->t('Search in'), | |
'options' => array( | |
'all' => $this->t('Both translated and untranslated strings'), | |
'translated' => $this->t('Only translated strings'), | |
'untranslated' => $this->t('Only untranslated strings'), | |
), | |
'default' => 'all', | |
); | |
$filters['customized'] = array( | |
'title' => $this->t('Translation type'), | |
'options' => array( | |
'all' => $this->t('All'), | |
LOCALE_NOT_CUSTOMIZED => $this->t('Non-customized translation'), | |
LOCALE_CUSTOMIZED => $this->t('Customized translation'), | |
), | |
'states' => array( | |
'visible' => array( | |
':input[name=translation]' => array('value' => 'translated'), | |
), | |
), | |
'default' => 'all', | |
); | |
return $filters; | |
} | |
} |