<commit_before><?php
/*
 * (c) webfactory GmbH <<EMAIL>>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Webfactory\Bundle\WfdMetaBundle\Translation;

use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator;
use Webfactory\Bundle\WfdMetaBundle\MetaQuery;

/**
 * RefreshingTranslator ist wie Symfony\Bundle\FrameworkBundle\Translation\Translator mit der
 * Besonderheit, dass er zusätzlich den wfd_meta.last_touched-Timestamp berücksichtigt
 * und seinen Cache invalidiert, wenn darüber Änderungen der Datenbank bemerkt werden.
 *
 * Da wir nicht (wie beim RefreshingRouter) gezielt an den Code im parent::loadCatalogue ran kommen,
 * der den unzureichenden ConfigCache erzeugt, löschen wir hier einfach abhängig vom wfd_meta.last_touched-Timestamp
 * die Cache-Datei, da dann auch der normale ConfigCache invalide wird.
 */
class RefreshingTranslator extends BaseTranslator
{

    /** @var MetaQuery */
    protected $metaQuery;

    public function setMetaQuery(MetaQuery $metaQuery)
    {
        $this->metaQuery = $metaQuery;
    }

    public function addWfdTableDependency($tables)
    {
        trigger_error(
            'The addWfdTableDependency() setter is deprecated. Configure the MetaQuery instead.',
            E_USER_DEPRECATED
        );

        $this->metaQuery->addTable($tables);
    }

    protected function loadCatalogue($locale)
    {
        // Wissen aus der Elternklasse
        $cacheFile = $this->options['cache_dir'].'/catalogue.'.$locale.'.php';

        // Schauen, ob die Cache-Datei älter als wfd_meta.last_touced ist
        if (file_exists($cacheFile)) {
            if (filemtime($cacheFile) < $this->metaQuery->getLastTouched()) {
                @unlink($cacheFile);
            }
        }

        parent::loadCatalogue($locale);
    }
}<commit_msg>added check for translation cache files of newer Symfony versions<commit_after><?php
/*
 * (c) webfactory GmbH <<EMAIL>>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Webfactory\Bundle\WfdMetaBundle\Translation;

use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator;
use Webfactory\Bundle\WfdMetaBundle\MetaQuery;

/**
 * RefreshingTranslator ist wie Symfony\Bundle\FrameworkBundle\Translation\Translator mit der
 * Besonderheit, dass er zusätzlich den wfd_meta.last_touched-Timestamp berücksichtigt
 * und seinen Cache invalidiert, wenn darüber Änderungen der Datenbank bemerkt werden.
 *
 * Da wir nicht (wie beim RefreshingRouter) gezielt an den Code im parent::loadCatalogue ran kommen,
 * der den unzureichenden ConfigCache erzeugt, löschen wir hier einfach abhängig vom wfd_meta.last_touched-Timestamp
 * die Cache-Datei, da dann auch der normale ConfigCache invalide wird.
 */
class RefreshingTranslator extends BaseTranslator
{

    /** @var MetaQuery */
    protected $metaQuery;

    public function setMetaQuery(MetaQuery $metaQuery)
    {
        $this->metaQuery = $metaQuery;
    }

    public function addWfdTableDependency($tables)
    {
        trigger_error(
            'The addWfdTableDependency() setter is deprecated. Configure the MetaQuery instead.',
            E_USER_DEPRECATED
        );

        $this->metaQuery->addTable($tables);
    }

    protected function loadCatalogue($locale)
    {
        // Schauen, ob die Cache-Datei älter als wfd_meta.last_touced ist
        foreach ($this->getCacheFiles($locale) as $cacheFile) {
            if (filemtime($cacheFile) < $this->metaQuery->getLastTouched()) {
                @unlink($cacheFile);
            }
        }

        parent::loadCatalogue($locale);
    }

    /**
     * Returns a list of (existing) cache files that are related to the given locale.
     *
     * @param string $locale
     * @return string[]
     */
    protected function getCacheFiles($locale)
    {
        // Find cache files that contain a hash. These are generated by newer Symfony
        // versions (at least starting with 2.6).
        $paths = glob($this->options['cache_dir'] . '/catalogue.' . $locale . '.*.php');
        // Check the cache file that is generated by older Symfony versions (around 2.3).
        $cacheFile = $this->options['cache_dir'] . '/catalogue.' . $locale . '.php';
        if (is_file($cacheFile)) {
            $paths[] = $cacheFile;
        }
        return $paths;
    }
}
{'fraction_non_alphanumeric': 0.09617947578853843, 'fraction_numerical': 0.000888494002665482, 'mean_word_length': 3.1160877513711154, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4134647', 'n_tokens_mistral': 1328, 'n_tokens_neox': 1307, 'n_words': 365}