Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
CRAP | |
0.00% |
0 / 62 |
PoDatabaseReader | |
0.00% |
0 / 1 |
|
0.00% |
0 / 10 |
342 | |
0.00% |
0 / 62 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getLangcode | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setLangcode | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getOptions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setOptions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
getHeader | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
setHeader | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
loadStrings | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 31 |
|||
readString | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
readItem | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\locale\PoDatabaseReader. | |
*/ | |
namespace Drupal\locale; | |
use Drupal\Component\Gettext\PoHeader; | |
use Drupal\Component\Gettext\PoItem; | |
use Drupal\Component\Gettext\PoReaderInterface; | |
/** | |
* Gettext PO reader working with the locale module database. | |
*/ | |
class PoDatabaseReader implements PoReaderInterface { | |
/** | |
* An associative array indicating which type of strings should be read. | |
* | |
* Elements of the array: | |
* - not_customized: boolean indicating if not customized strings should be | |
* read. | |
* - customized: boolean indicating if customized strings should be read. | |
* - no_translated: boolean indicating if non-translated should be read. | |
* | |
* The three options define three distinct sets of strings, which combined | |
* cover all strings. | |
* | |
* @var array | |
*/ | |
private $options; | |
/** | |
* Language code of the language being read from the database. | |
* | |
* @var string | |
*/ | |
private $langcode; | |
/** | |
* Store the result of the query so it can be iterated later. | |
* | |
* @var resource | |
*/ | |
private $result; | |
/** | |
* Constructor, initializes with default options. | |
*/ | |
public function __construct() { | |
$this->setOptions(array()); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getLangcode() { | |
return $this->langcode; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setLangcode($langcode) { | |
$this->langcode = $langcode; | |
} | |
/** | |
* Get the options used by the reader. | |
*/ | |
public function getOptions() { | |
return $this->options; | |
} | |
/** | |
* Set the options for the current reader. | |
*/ | |
public function setOptions(array $options) { | |
$options += array( | |
'customized' => FALSE, | |
'not_customized' => FALSE, | |
'not_translated' => FALSE, | |
); | |
$this->options = $options; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getHeader() { | |
return new PoHeader($this->getLangcode()); | |
} | |
/** | |
* Implements Drupal\Component\Gettext\PoMetadataInterface::setHeader(). | |
* | |
* @throws Exception | |
* Always, because you cannot set the PO header of a reader. | |
*/ | |
public function setHeader(PoHeader $header) { | |
throw new \Exception('You cannot set the PO header in a reader.'); | |
} | |
/** | |
* Builds and executes a database query based on options set earlier. | |
*/ | |
private function loadStrings() { | |
$langcode = $this->langcode; | |
$options = $this->options; | |
$conditions = array(); | |
if (array_sum($options) == 0) { | |
// If user asked to not include anything in the translation files, | |
// that would not make sense, so just fall back on providing a template. | |
$langcode = NULL; | |
// Force option to get both translated and untranslated strings. | |
$options['not_translated'] = TRUE; | |
} | |
// Build and execute query to collect source strings and translations. | |
if (!empty($langcode)) { | |
$conditions['language'] = $langcode; | |
// Translate some options into field conditions. | |
if ($options['customized']) { | |
if (!$options['not_customized']) { | |
// Filter for customized strings only. | |
$conditions['customized'] = LOCALE_CUSTOMIZED; | |
} | |
// Else no filtering needed in this case. | |
} | |
else { | |
if ($options['not_customized']) { | |
// Filter for non-customized strings only. | |
$conditions['customized'] = LOCALE_NOT_CUSTOMIZED; | |
} | |
else { | |
// Filter for strings without translation. | |
$conditions['translated'] = FALSE; | |
} | |
} | |
if (!$options['not_translated']) { | |
// Filter for string with translation. | |
$conditions['translated'] = TRUE; | |
} | |
return \Drupal::service('locale.storage')->getTranslations($conditions); | |
} | |
else { | |
// If no language, we don't need any of the target fields. | |
return \Drupal::service('locale.storage')->getStrings($conditions); | |
} | |
} | |
/** | |
* Get the database result resource for the given language and options. | |
*/ | |
private function readString() { | |
if (!isset($this->result)) { | |
$this->result = $this->loadStrings(); | |
} | |
return array_shift($this->result); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function readItem() { | |
if ($string = $this->readString()) { | |
$values = (array) $string; | |
$po_item = new PoItem(); | |
$po_item->setFromArray($values); | |
return $po_item; | |
} | |
} | |
} |