annotate vendor/symfony/translation/Catalogue/AbstractOperation.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\Translation\Catalogue;
Chris@0 13
Chris@0 14 use Symfony\Component\Translation\MessageCatalogue;
Chris@0 15 use Symfony\Component\Translation\MessageCatalogueInterface;
Chris@0 16 use Symfony\Component\Translation\Exception\InvalidArgumentException;
Chris@0 17 use Symfony\Component\Translation\Exception\LogicException;
Chris@0 18
Chris@0 19 /**
Chris@0 20 * Base catalogues binary operation class.
Chris@0 21 *
Chris@0 22 * A catalogue binary operation performs operation on
Chris@0 23 * source (the left argument) and target (the right argument) catalogues.
Chris@0 24 *
Chris@0 25 * @author Jean-François Simon <contact@jfsimon.fr>
Chris@0 26 */
Chris@0 27 abstract class AbstractOperation implements OperationInterface
Chris@0 28 {
Chris@0 29 protected $source;
Chris@0 30 protected $target;
Chris@0 31 protected $result;
Chris@0 32
Chris@0 33 /**
Chris@0 34 * @var null|array The domains affected by this operation
Chris@0 35 */
Chris@0 36 private $domains;
Chris@0 37
Chris@0 38 /**
Chris@0 39 * This array stores 'all', 'new' and 'obsolete' messages for all valid domains.
Chris@0 40 *
Chris@0 41 * The data structure of this array is as follows:
Chris@0 42 * ```php
Chris@0 43 * array(
Chris@0 44 * 'domain 1' => array(
Chris@0 45 * 'all' => array(...),
Chris@0 46 * 'new' => array(...),
Chris@0 47 * 'obsolete' => array(...)
Chris@0 48 * ),
Chris@0 49 * 'domain 2' => array(
Chris@0 50 * 'all' => array(...),
Chris@0 51 * 'new' => array(...),
Chris@0 52 * 'obsolete' => array(...)
Chris@0 53 * ),
Chris@0 54 * ...
Chris@0 55 * )
Chris@0 56 * ```
Chris@0 57 *
Chris@0 58 * @var array The array that stores 'all', 'new' and 'obsolete' messages
Chris@0 59 */
Chris@0 60 protected $messages;
Chris@0 61
Chris@0 62 /**
Chris@0 63 * @throws LogicException
Chris@0 64 */
Chris@0 65 public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
Chris@0 66 {
Chris@0 67 if ($source->getLocale() !== $target->getLocale()) {
Chris@0 68 throw new LogicException('Operated catalogues must belong to the same locale.');
Chris@0 69 }
Chris@0 70
Chris@0 71 $this->source = $source;
Chris@0 72 $this->target = $target;
Chris@0 73 $this->result = new MessageCatalogue($source->getLocale());
Chris@0 74 $this->messages = array();
Chris@0 75 }
Chris@0 76
Chris@0 77 /**
Chris@0 78 * {@inheritdoc}
Chris@0 79 */
Chris@0 80 public function getDomains()
Chris@0 81 {
Chris@0 82 if (null === $this->domains) {
Chris@0 83 $this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains())));
Chris@0 84 }
Chris@0 85
Chris@0 86 return $this->domains;
Chris@0 87 }
Chris@0 88
Chris@0 89 /**
Chris@0 90 * {@inheritdoc}
Chris@0 91 */
Chris@0 92 public function getMessages($domain)
Chris@0 93 {
Chris@0 94 if (!in_array($domain, $this->getDomains())) {
Chris@0 95 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 96 }
Chris@0 97
Chris@0 98 if (!isset($this->messages[$domain]['all'])) {
Chris@0 99 $this->processDomain($domain);
Chris@0 100 }
Chris@0 101
Chris@0 102 return $this->messages[$domain]['all'];
Chris@0 103 }
Chris@0 104
Chris@0 105 /**
Chris@0 106 * {@inheritdoc}
Chris@0 107 */
Chris@0 108 public function getNewMessages($domain)
Chris@0 109 {
Chris@0 110 if (!in_array($domain, $this->getDomains())) {
Chris@0 111 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 112 }
Chris@0 113
Chris@0 114 if (!isset($this->messages[$domain]['new'])) {
Chris@0 115 $this->processDomain($domain);
Chris@0 116 }
Chris@0 117
Chris@0 118 return $this->messages[$domain]['new'];
Chris@0 119 }
Chris@0 120
Chris@0 121 /**
Chris@0 122 * {@inheritdoc}
Chris@0 123 */
Chris@0 124 public function getObsoleteMessages($domain)
Chris@0 125 {
Chris@0 126 if (!in_array($domain, $this->getDomains())) {
Chris@0 127 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 128 }
Chris@0 129
Chris@0 130 if (!isset($this->messages[$domain]['obsolete'])) {
Chris@0 131 $this->processDomain($domain);
Chris@0 132 }
Chris@0 133
Chris@0 134 return $this->messages[$domain]['obsolete'];
Chris@0 135 }
Chris@0 136
Chris@0 137 /**
Chris@0 138 * {@inheritdoc}
Chris@0 139 */
Chris@0 140 public function getResult()
Chris@0 141 {
Chris@0 142 foreach ($this->getDomains() as $domain) {
Chris@0 143 if (!isset($this->messages[$domain])) {
Chris@0 144 $this->processDomain($domain);
Chris@0 145 }
Chris@0 146 }
Chris@0 147
Chris@0 148 return $this->result;
Chris@0 149 }
Chris@0 150
Chris@0 151 /**
Chris@0 152 * Performs operation on source and target catalogues for the given domain and
Chris@0 153 * stores the results.
Chris@0 154 *
Chris@0 155 * @param string $domain The domain which the operation will be performed for
Chris@0 156 */
Chris@0 157 abstract protected function processDomain($domain);
Chris@0 158 }