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; | |
| } | |
| } | |
| } |