Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\Translation\DataCollector; Chris@0: Chris@0: use Symfony\Component\HttpFoundation\Request; Chris@0: use Symfony\Component\HttpFoundation\Response; Chris@0: use Symfony\Component\HttpKernel\DataCollector\DataCollector; Chris@0: use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface; Chris@0: use Symfony\Component\Translation\DataCollectorTranslator; Chris@0: Chris@0: /** Chris@0: * @author Abdellatif Ait boudad Chris@0: */ Chris@0: class TranslationDataCollector extends DataCollector implements LateDataCollectorInterface Chris@0: { Chris@0: /** Chris@0: * @var DataCollectorTranslator Chris@0: */ Chris@0: private $translator; Chris@0: Chris@0: /** Chris@0: * @param DataCollectorTranslator $translator Chris@0: */ Chris@0: public function __construct(DataCollectorTranslator $translator) Chris@0: { Chris@0: $this->translator = $translator; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function lateCollect() Chris@0: { Chris@0: $messages = $this->sanitizeCollectedMessages($this->translator->getCollectedMessages()); Chris@0: Chris@0: $this->data = $this->computeCount($messages); Chris@0: $this->data['messages'] = $messages; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function collect(Request $request, Response $response, \Exception $exception = null) Chris@0: { Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return array Chris@0: */ Chris@0: public function getMessages() Chris@0: { Chris@0: return isset($this->data['messages']) ? $this->data['messages'] : array(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return int Chris@0: */ Chris@0: public function getCountMissings() Chris@0: { Chris@0: return isset($this->data[DataCollectorTranslator::MESSAGE_MISSING]) ? $this->data[DataCollectorTranslator::MESSAGE_MISSING] : 0; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return int Chris@0: */ Chris@0: public function getCountFallbacks() Chris@0: { Chris@0: return isset($this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK]) ? $this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK] : 0; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return int Chris@0: */ Chris@0: public function getCountDefines() Chris@0: { Chris@0: return isset($this->data[DataCollectorTranslator::MESSAGE_DEFINED]) ? $this->data[DataCollectorTranslator::MESSAGE_DEFINED] : 0; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getName() Chris@0: { Chris@0: return 'translation'; Chris@0: } Chris@0: Chris@0: private function sanitizeCollectedMessages($messages) Chris@0: { Chris@0: $result = array(); Chris@0: foreach ($messages as $key => $message) { Chris@0: $messageId = $message['locale'].$message['domain'].$message['id']; Chris@0: Chris@0: if (!isset($result[$messageId])) { Chris@0: $message['count'] = 1; Chris@0: $message['parameters'] = !empty($message['parameters']) ? array($this->cloneVar($message['parameters'])) : array(); Chris@0: $messages[$key]['translation'] = $this->sanitizeString($message['translation']); Chris@0: $result[$messageId] = $message; Chris@0: } else { Chris@0: if (!empty($message['parameters'])) { Chris@0: $result[$messageId]['parameters'][] = $this->cloneVar($message['parameters']); Chris@0: } Chris@0: Chris@0: ++$result[$messageId]['count']; Chris@0: } Chris@0: Chris@0: unset($messages[$key]); Chris@0: } Chris@0: Chris@0: return $result; Chris@0: } Chris@0: Chris@0: private function computeCount($messages) Chris@0: { Chris@0: $count = array( Chris@0: DataCollectorTranslator::MESSAGE_DEFINED => 0, Chris@0: DataCollectorTranslator::MESSAGE_MISSING => 0, Chris@0: DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK => 0, Chris@0: ); Chris@0: Chris@0: foreach ($messages as $message) { Chris@0: ++$count[$message['state']]; Chris@0: } Chris@0: Chris@0: return $count; Chris@0: } Chris@0: Chris@0: private function sanitizeString($string, $length = 80) Chris@0: { Chris@0: $string = trim(preg_replace('/\s+/', ' ', $string)); Chris@0: Chris@0: if (false !== $encoding = mb_detect_encoding($string, null, true)) { Chris@0: if (mb_strlen($string, $encoding) > $length) { Chris@0: return mb_substr($string, 0, $length - 3, $encoding).'...'; Chris@0: } Chris@0: } elseif (strlen($string) > $length) { Chris@0: return substr($string, 0, $length - 3).'...'; Chris@0: } Chris@0: Chris@0: return $string; Chris@0: } Chris@0: }