| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 | 
							- <?php
 
- /*
 
-  * This file is part of the Symfony package.
 
-  *
 
-  * (c) Fabien Potencier <fabien@symfony.com>
 
-  *
 
-  * For the full copyright and license information, please view the LICENSE
 
-  * file that was distributed with this source code.
 
-  */
 
- namespace Symfony\Component\Translation\Catalogue;
 
- use Symfony\Component\Translation\Exception\InvalidArgumentException;
 
- use Symfony\Component\Translation\Exception\LogicException;
 
- use Symfony\Component\Translation\MessageCatalogue;
 
- use Symfony\Component\Translation\MessageCatalogueInterface;
 
- /**
 
-  * Base catalogues binary operation class.
 
-  *
 
-  * A catalogue binary operation performs operation on
 
-  * source (the left argument) and target (the right argument) catalogues.
 
-  *
 
-  * @author Jean-François Simon <contact@jfsimon.fr>
 
-  */
 
- abstract class AbstractOperation implements OperationInterface
 
- {
 
-     protected $source;
 
-     protected $target;
 
-     protected $result;
 
-     /**
 
-      * @var array|null The domains affected by this operation
 
-      */
 
-     private $domains;
 
-     /**
 
-      * This array stores 'all', 'new' and 'obsolete' messages for all valid domains.
 
-      *
 
-      * The data structure of this array is as follows:
 
-      *
 
-      *     [
 
-      *         'domain 1' => [
 
-      *             'all' => [...],
 
-      *             'new' => [...],
 
-      *             'obsolete' => [...]
 
-      *         ],
 
-      *         'domain 2' => [
 
-      *             'all' => [...],
 
-      *             'new' => [...],
 
-      *             'obsolete' => [...]
 
-      *         ],
 
-      *         ...
 
-      *     ]
 
-      *
 
-      * @var array The array that stores 'all', 'new' and 'obsolete' messages
 
-      */
 
-     protected $messages;
 
-     /**
 
-      * @throws LogicException
 
-      */
 
-     public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
 
-     {
 
-         if ($source->getLocale() !== $target->getLocale()) {
 
-             throw new LogicException('Operated catalogues must belong to the same locale.');
 
-         }
 
-         $this->source = $source;
 
-         $this->target = $target;
 
-         $this->result = new MessageCatalogue($source->getLocale());
 
-         $this->messages = [];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getDomains()
 
-     {
 
-         if (null === $this->domains) {
 
-             $this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains())));
 
-         }
 
-         return $this->domains;
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getMessages(string $domain)
 
-     {
 
-         if (!\in_array($domain, $this->getDomains())) {
 
-             throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain));
 
-         }
 
-         if (!isset($this->messages[$domain]['all'])) {
 
-             $this->processDomain($domain);
 
-         }
 
-         return $this->messages[$domain]['all'];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getNewMessages(string $domain)
 
-     {
 
-         if (!\in_array($domain, $this->getDomains())) {
 
-             throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain));
 
-         }
 
-         if (!isset($this->messages[$domain]['new'])) {
 
-             $this->processDomain($domain);
 
-         }
 
-         return $this->messages[$domain]['new'];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getObsoleteMessages(string $domain)
 
-     {
 
-         if (!\in_array($domain, $this->getDomains())) {
 
-             throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain));
 
-         }
 
-         if (!isset($this->messages[$domain]['obsolete'])) {
 
-             $this->processDomain($domain);
 
-         }
 
-         return $this->messages[$domain]['obsolete'];
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function getResult()
 
-     {
 
-         foreach ($this->getDomains() as $domain) {
 
-             if (!isset($this->messages[$domain])) {
 
-                 $this->processDomain($domain);
 
-             }
 
-         }
 
-         return $this->result;
 
-     }
 
-     /**
 
-      * Performs operation on source and target catalogues for the given domain and
 
-      * stores the results.
 
-      *
 
-      * @param string $domain The domain which the operation will be performed for
 
-      */
 
-     abstract protected function processDomain(string $domain);
 
- }
 
 
  |