annotate vendor/symfony/translation/Catalogue/AbstractOperation.php @ 2:92f882872392

Trusted hosts, + remove migration modules
author Chris Cannam
date Tue, 05 Dec 2017 09:26:43 +0000
parents 4c8ae668cc8c
children 1fec387a4317
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 /**
Chris@0 30 * @var MessageCatalogueInterface The source catalogue
Chris@0 31 */
Chris@0 32 protected $source;
Chris@0 33
Chris@0 34 /**
Chris@0 35 * @var MessageCatalogueInterface The target catalogue
Chris@0 36 */
Chris@0 37 protected $target;
Chris@0 38
Chris@0 39 /**
Chris@0 40 * @var MessageCatalogue The result catalogue
Chris@0 41 */
Chris@0 42 protected $result;
Chris@0 43
Chris@0 44 /**
Chris@0 45 * @var null|array The domains affected by this operation
Chris@0 46 */
Chris@0 47 private $domains;
Chris@0 48
Chris@0 49 /**
Chris@0 50 * This array stores 'all', 'new' and 'obsolete' messages for all valid domains.
Chris@0 51 *
Chris@0 52 * The data structure of this array is as follows:
Chris@0 53 * ```php
Chris@0 54 * array(
Chris@0 55 * 'domain 1' => array(
Chris@0 56 * 'all' => array(...),
Chris@0 57 * 'new' => array(...),
Chris@0 58 * 'obsolete' => array(...)
Chris@0 59 * ),
Chris@0 60 * 'domain 2' => array(
Chris@0 61 * 'all' => array(...),
Chris@0 62 * 'new' => array(...),
Chris@0 63 * 'obsolete' => array(...)
Chris@0 64 * ),
Chris@0 65 * ...
Chris@0 66 * )
Chris@0 67 * ```
Chris@0 68 *
Chris@0 69 * @var array The array that stores 'all', 'new' and 'obsolete' messages
Chris@0 70 */
Chris@0 71 protected $messages;
Chris@0 72
Chris@0 73 /**
Chris@0 74 * @param MessageCatalogueInterface $source The source catalogue
Chris@0 75 * @param MessageCatalogueInterface $target The target catalogue
Chris@0 76 *
Chris@0 77 * @throws LogicException
Chris@0 78 */
Chris@0 79 public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
Chris@0 80 {
Chris@0 81 if ($source->getLocale() !== $target->getLocale()) {
Chris@0 82 throw new LogicException('Operated catalogues must belong to the same locale.');
Chris@0 83 }
Chris@0 84
Chris@0 85 $this->source = $source;
Chris@0 86 $this->target = $target;
Chris@0 87 $this->result = new MessageCatalogue($source->getLocale());
Chris@0 88 $this->messages = array();
Chris@0 89 }
Chris@0 90
Chris@0 91 /**
Chris@0 92 * {@inheritdoc}
Chris@0 93 */
Chris@0 94 public function getDomains()
Chris@0 95 {
Chris@0 96 if (null === $this->domains) {
Chris@0 97 $this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains())));
Chris@0 98 }
Chris@0 99
Chris@0 100 return $this->domains;
Chris@0 101 }
Chris@0 102
Chris@0 103 /**
Chris@0 104 * {@inheritdoc}
Chris@0 105 */
Chris@0 106 public function getMessages($domain)
Chris@0 107 {
Chris@0 108 if (!in_array($domain, $this->getDomains())) {
Chris@0 109 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 110 }
Chris@0 111
Chris@0 112 if (!isset($this->messages[$domain]['all'])) {
Chris@0 113 $this->processDomain($domain);
Chris@0 114 }
Chris@0 115
Chris@0 116 return $this->messages[$domain]['all'];
Chris@0 117 }
Chris@0 118
Chris@0 119 /**
Chris@0 120 * {@inheritdoc}
Chris@0 121 */
Chris@0 122 public function getNewMessages($domain)
Chris@0 123 {
Chris@0 124 if (!in_array($domain, $this->getDomains())) {
Chris@0 125 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 126 }
Chris@0 127
Chris@0 128 if (!isset($this->messages[$domain]['new'])) {
Chris@0 129 $this->processDomain($domain);
Chris@0 130 }
Chris@0 131
Chris@0 132 return $this->messages[$domain]['new'];
Chris@0 133 }
Chris@0 134
Chris@0 135 /**
Chris@0 136 * {@inheritdoc}
Chris@0 137 */
Chris@0 138 public function getObsoleteMessages($domain)
Chris@0 139 {
Chris@0 140 if (!in_array($domain, $this->getDomains())) {
Chris@0 141 throw new InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
Chris@0 142 }
Chris@0 143
Chris@0 144 if (!isset($this->messages[$domain]['obsolete'])) {
Chris@0 145 $this->processDomain($domain);
Chris@0 146 }
Chris@0 147
Chris@0 148 return $this->messages[$domain]['obsolete'];
Chris@0 149 }
Chris@0 150
Chris@0 151 /**
Chris@0 152 * {@inheritdoc}
Chris@0 153 */
Chris@0 154 public function getResult()
Chris@0 155 {
Chris@0 156 foreach ($this->getDomains() as $domain) {
Chris@0 157 if (!isset($this->messages[$domain])) {
Chris@0 158 $this->processDomain($domain);
Chris@0 159 }
Chris@0 160 }
Chris@0 161
Chris@0 162 return $this->result;
Chris@0 163 }
Chris@0 164
Chris@0 165 /**
Chris@0 166 * Performs operation on source and target catalogues for the given domain and
Chris@0 167 * stores the results.
Chris@0 168 *
Chris@0 169 * @param string $domain The domain which the operation will be performed for
Chris@0 170 */
Chris@0 171 abstract protected function processDomain($domain);
Chris@0 172 }