ecoco/magento_profiler

View on GitHub
app/code/community/Ecocode/Profiler/Model/Collector/TranslationDataCollector.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php

/**
 * Class Ecocode_Profiler_Model_Collector_TranslationDataCollector
 */
class Ecocode_Profiler_Model_Collector_TranslationDataCollector
    extends Ecocode_Profiler_Model_Collector_AbstractDataCollector
{
    protected $_currentBlock;

    protected $stateCounts = [
        'translated'  => 0,
        'missing'     => 0,
        'invalid'     => 0,
        'fallback'    => 0
    ];

    /**
     * @return Mage_Core_Model_Translate
     * @codeCoverageIgnore
     */
    protected function getTranslator()
    {
        return Mage::getSingleton('core/translate');
    }

    /**
     * {@inheritdoc}
     */
    public function collect(
        Mage_Core_Controller_Request_Http $request,
        Mage_Core_Controller_Response_Http $response,
        \Exception $exception = null
    )
    {

        $this->data['state_counts'] = $this->stateCounts;
        $translations               = [];

        foreach ($this->getTranslator()->getMessages() as $translation) {
            $translationId = $translation['code'];
            $parameters    = $translation['parameters'];

            if (!isset($translations[$translationId])) {
                $translation['count']         = 0;
                $translation['parameters']    = [];
                $translation['traces']        = [];
                $translations[$translationId] = $translation;
                $this->data['state_counts'][$translation['state']]++;
            }

            if (!empty($parameters)) {
                $translations[$translationId]['parameters'][] = $parameters;
            }

            if (!empty($translation['trace'])) {
                $traceId = md5(serialize($translation['trace']));

                //do not capture traces multiple times
                if (!isset($translations[$translationId]['traces'][$traceId])) {
                    $translations[$translationId]['traces'][$traceId] = [
                        'id'    => $traceId,
                        'count' => 0,
                        'trace' => $translation['trace']
                    ];
                }
                $translations[$translationId]['traces'][$traceId]['count']++;
            }

            $translations[$translationId]['count']++;
        }

        $this->data['translations']      = $translations;
        $this->data['translation_count'] = count($translations);
    }

    public function getTranslations()
    {
        return $this->getData('translations', []);
    }

    public function getTranslationCount()
    {
        return $this->getData('translation_count', 0);
    }

    public function getStateCount($status = null)
    {
        if ($status === null) {
            return $this->data['state_counts'];
        }
        return $this->data['state_counts'][$status];
    }

    public function getNotOkCount()
    {
        return $this->getStateCount('invalid')
            + $this->getStateCount('missing')
            + $this->getStateCount('fallback');
    }

    /**
     * {@inheritdoc}
     * @codeCoverageIgnore
     */
    public function getName()
    {
        return 'translation';
    }
}