PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.4
Independent Analytics – WordPress Analytics Plugin v2.15.4
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / symfony / translation / Catalogue / AbstractOperation.php
independent-analytics / vendor / symfony / translation / Catalogue Last commit date
AbstractOperation.php 1 month ago MergeOperation.php 2 years ago OperationInterface.php 1 month ago TargetOperation.php 2 years ago
AbstractOperation.php
185 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace IAWPSCOPED\Symfony\Component\Translation\Catalogue;
12
13 use IAWPSCOPED\Symfony\Component\Translation\Exception\InvalidArgumentException;
14 use IAWPSCOPED\Symfony\Component\Translation\Exception\LogicException;
15 use IAWPSCOPED\Symfony\Component\Translation\MessageCatalogue;
16 use IAWPSCOPED\Symfony\Component\Translation\MessageCatalogueInterface;
17 /**
18 * Base catalogues binary operation class.
19 *
20 * A catalogue binary operation performs operation on
21 * source (the left argument) and target (the right argument) catalogues.
22 *
23 * @author Jean-François Simon <contact@jfsimon.fr>
24 * @internal
25 */
26 abstract class AbstractOperation implements OperationInterface
27 {
28 public const OBSOLETE_BATCH = 'obsolete';
29 public const NEW_BATCH = 'new';
30 public const ALL_BATCH = 'all';
31 protected $source;
32 protected $target;
33 protected $result;
34 /**
35 * @var array|null The domains affected by this operation
36 */
37 private $domains;
38 /**
39 * This array stores 'all', 'new' and 'obsolete' messages for all valid domains.
40 *
41 * The data structure of this array is as follows:
42 *
43 * [
44 * 'domain 1' => [
45 * 'all' => [...],
46 * 'new' => [...],
47 * 'obsolete' => [...]
48 * ],
49 * 'domain 2' => [
50 * 'all' => [...],
51 * 'new' => [...],
52 * 'obsolete' => [...]
53 * ],
54 * ...
55 * ]
56 *
57 * @var array The array that stores 'all', 'new' and 'obsolete' messages
58 */
59 protected $messages;
60 /**
61 * @throws LogicException
62 */
63 public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
64 {
65 if ($source->getLocale() !== $target->getLocale()) {
66 throw new LogicException('Operated catalogues must belong to the same locale.');
67 }
68 $this->source = $source;
69 $this->target = $target;
70 $this->result = new MessageCatalogue($source->getLocale());
71 $this->messages = [];
72 }
73 /**
74 * {@inheritdoc}
75 */
76 public function getDomains() : array
77 {
78 if (null === $this->domains) {
79 $domains = [];
80 foreach ([$this->source, $this->target] as $catalogue) {
81 foreach ($catalogue->getDomains() as $domain) {
82 $domains[$domain] = $domain;
83 if ($catalogue->all($domainIcu = $domain . MessageCatalogueInterface::INTL_DOMAIN_SUFFIX)) {
84 $domains[$domainIcu] = $domainIcu;
85 }
86 }
87 }
88 $this->domains = \array_values($domains);
89 }
90 return $this->domains;
91 }
92 /**
93 * {@inheritdoc}
94 */
95 public function getMessages(string $domain) : array
96 {
97 if (!\in_array($domain, $this->getDomains())) {
98 throw new InvalidArgumentException(\sprintf('Invalid domain: "%s".', $domain));
99 }
100 if (!isset($this->messages[$domain][self::ALL_BATCH])) {
101 $this->processDomain($domain);
102 }
103 return $this->messages[$domain][self::ALL_BATCH];
104 }
105 /**
106 * {@inheritdoc}
107 */
108 public function getNewMessages(string $domain) : array
109 {
110 if (!\in_array($domain, $this->getDomains())) {
111 throw new InvalidArgumentException(\sprintf('Invalid domain: "%s".', $domain));
112 }
113 if (!isset($this->messages[$domain][self::NEW_BATCH])) {
114 $this->processDomain($domain);
115 }
116 return $this->messages[$domain][self::NEW_BATCH];
117 }
118 /**
119 * {@inheritdoc}
120 */
121 public function getObsoleteMessages(string $domain) : array
122 {
123 if (!\in_array($domain, $this->getDomains())) {
124 throw new InvalidArgumentException(\sprintf('Invalid domain: "%s".', $domain));
125 }
126 if (!isset($this->messages[$domain][self::OBSOLETE_BATCH])) {
127 $this->processDomain($domain);
128 }
129 return $this->messages[$domain][self::OBSOLETE_BATCH];
130 }
131 /**
132 * {@inheritdoc}
133 */
134 public function getResult() : MessageCatalogueInterface
135 {
136 foreach ($this->getDomains() as $domain) {
137 if (!isset($this->messages[$domain])) {
138 $this->processDomain($domain);
139 }
140 }
141 return $this->result;
142 }
143 /**
144 * @param self::*_BATCH $batch
145 */
146 public function moveMessagesToIntlDomainsIfPossible(string $batch = self::ALL_BATCH) : void
147 {
148 // If MessageFormatter class does not exists, intl domains are not supported.
149 if (!\class_exists(\MessageFormatter::class)) {
150 return;
151 }
152 foreach ($this->getDomains() as $domain) {
153 $intlDomain = $domain . MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;
154 switch ($batch) {
155 case self::OBSOLETE_BATCH:
156 $messages = $this->getObsoleteMessages($domain);
157 break;
158 case self::NEW_BATCH:
159 $messages = $this->getNewMessages($domain);
160 break;
161 case self::ALL_BATCH:
162 $messages = $this->getMessages($domain);
163 break;
164 default:
165 throw new \InvalidArgumentException(\sprintf('$batch argument must be one of ["%s", "%s", "%s"].', self::ALL_BATCH, self::NEW_BATCH, self::OBSOLETE_BATCH));
166 }
167 if (!$messages || !$this->source->all($intlDomain) && $this->source->all($domain)) {
168 continue;
169 }
170 $result = $this->getResult();
171 $allIntlMessages = $result->all($intlDomain);
172 $currentMessages = \array_diff_key($messages, $result->all($domain));
173 $result->replace($currentMessages, $domain);
174 $result->replace($allIntlMessages + $messages, $intlDomain);
175 }
176 }
177 /**
178 * Performs operation on source and target catalogues for the given domain and
179 * stores the results.
180 *
181 * @param string $domain The domain which the operation will be performed for
182 */
183 protected abstract function processDomain(string $domain);
184 }
185