Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Service/Phrase/Compile.php
<?php

namespace XF\Service\Phrase;

use
XF\Entity\Phrase;

class
Compile extends \XF\Service\AbstractService
{
    public function
recompile(Phrase $phrase)
    {
       
$languageIds = $phrase->getApplicableLanguageIds();
       
$title = $phrase->title;
       
$text = $phrase->phrase_text;

       
$output = [];
        foreach (
$languageIds AS $languageId)
        {
           
$language = $this->app->language($languageId);
            if (
$phrase->global_cache || $phrase->getPhraseGroup())
            {
               
// We must immediately cache the phrase if it's in a group. Not doing this can lead to old phrases
                // being seen as phrase groups are recompiled with a delay to prevent writing the cache file multiple
                // times. However, editing a phrase will immediately recompile any templates that use it so they
                // could be written before the cache is updated. If we keep the new version, we prevent that issue.
               
$language->cachePhrase($phrase->title, $phrase->phrase_text);
            }
            else
            {
               
// Ensure any failed attempts to get this phrase will work later. We could of course just cache the
                // phrase, but this could lead to all phrases being cached for all languages, which isn't ideal.
               
$language->uncachePhrase($phrase->title);
            }

           
$output[] = [
               
'language_id' => $languageId,
               
'title' => $title,
               
'phrase_text' => $text
           
];
        }

        if (
$output)
        {
           
$this->db()->insertBulk('xf_phrase_compiled', $output, false, 'phrase_text = VALUES(phrase_text)');
           
$this->finalize($phrase);
        }
    }

    public function
recompileByTitle($title)
    {
       
$phrases = $this->app->em()->getFinder('XF:Phrase')->where('title', $title)->fetch();
        foreach (
$phrases AS $phrase)
        {
           
$this->recompile($phrase);
        }
    }

    public function
recompileIncludeContent($title)
    {
       
$templateIds = $this->db()->fetchAllColumn("
            SELECT template_id
            FROM xf_template_phrase
            WHERE phrase_title = ?
        "
, $title);
        if (
$templateIds)
        {
           
/** @var \XF\Service\Template\Compile $compileService */
           
$compileService = $this->service('XF:Template\Compile');
           
$templates = $this->app->em()->findByIds('XF:Template', $templateIds);
            foreach (
$templates AS $template)
            {
               
$compileService->recompile($template);
            }
        }
    }

    public function
deleteCompiled(Phrase $phrase, $newValue = true)
    {
       
$title = $newValue ? $phrase->getValue('title') : $phrase->getExistingValue('title');
       
$languageIds = $phrase->getApplicableLanguageIds();

        if (
$languageIds)
        {
           
$db = $this->db();
           
$db->delete('xf_phrase_compiled', 'title = ? AND language_id IN (' . $db->quote($languageIds) . ')', $title);
        }

       
$this->finalize($phrase);
    }

    protected function
finalize(Phrase $phrase)
    {
    }
}