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

namespace XF\Service\Phrase;

use
XF\Entity\Language;

class
Import extends \XF\Service\AbstractService
{
   
/**
     * @var Language
     */
   
protected $language;

    public function
__construct(\XF\App $app, Language $language)
    {
       
parent::__construct($app);
       
$this->language = $language;
    }

    public function
getLanguage()
    {
        return
$this->language;
    }

    public function
importFromXml(\SimpleXMLElement $container, $addOnId)
    {
       
$this->deleteExistingPhrases($addOnId);

       
$languageId = $this->language->language_id;
       
$existingPhrases = $this->getExistingPhraseMap();

        foreach (
$container->phrase AS $xmlPhrase)
        {
           
$title = (string)$xmlPhrase['title'];

           
$phrase = null;
            if (isset(
$existingPhrases[$title]))
            {
               
$phrase = $this->em()->find('XF:Phrase', $existingPhrases[$title]);
            }
            if (!
$phrase)
            {
               
$phrase = $this->em()->create('XF:Phrase');
            }

           
$this->setPhraseOptions($phrase);

           
$phrase->title = $title;
           
$phrase->language_id = $languageId;
           
$phrase->phrase_text = \XF\Util\Xml::processSimpleXmlCdata((string)$xmlPhrase);
           
$phrase->global_cache = (int)$xmlPhrase['global_cache'];
           
$phrase->version_id = (int)$xmlPhrase['version_id'];
           
$phrase->version_string = (string)$xmlPhrase['version_string'];
           
$phrase->addon_id = (string)$xmlPhrase['addon_id'];

           
$phrase->save(false, false);
        }

       
$this->app->jobManager()->enqueueUnique('languageRebuild', 'XF:Atomic', [
           
'execute' => ['XF:PhraseRebuild', 'XF:TemplateRebuild']
        ]);
    }

    protected function
deleteExistingPhrases($addOnId)
    {
       
$where = 'language_id = ?';
       
$params = [$this->language->language_id];

        if (
$addOnId)
        {
           
$where .= ' AND addon_id = ?';
           
$params[] = $addOnId;
        }

       
$this->db()->delete('xf_phrase', $where, $params);
    }

    protected function
getExistingPhraseMap()
    {
        return
$this->db()->fetchPairs("
            SELECT title, phrase_id
            FROM xf_phrase
            WHERE language_id = ?
        "
, $this->language->language_id);
    }

    protected function
setPhraseOptions(\XF\Entity\Phrase $phrase)
    {
       
$phrase->setOption('recompile', false);
       
$phrase->setOption('recompile_include', false);
       
$phrase->setOption('rebuild_map', false);
       
$phrase->setOption('check_duplicate', false);

       
$phrase->getBehavior('XF:DevOutputWritable')->setOption('write_dev_output', false);
    }
}