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

namespace XF\Service\Language;

use
XF\Entity\Language;

use function
count;

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

   
/**
     * @var Language|null
     */
   
protected $parentLanguage;

    public function
setOverwriteLanguage(Language $language)
    {
       
$this->overwriteLanguage = $language;
       
$this->parentLanguage = null;
    }

    public function
getOverwriteLanguage()
    {
        return
$this->overwriteLanguage;
    }

    public function
setParentLanguage(Language $language = null)
    {
       
$this->parentLanguage = $language;
       
$this->overwriteLanguage = null;
    }

    public function
getParentLanguage()
    {
        return
$this->parentLanguage;
    }

    public function
isValidXml($rootElement, &$error = null)
    {
        if (!(
$rootElement instanceof \SimpleXMLElement))
        {
           
$error = \XF::phrase('provided_file_is_not_valid_language_xml');
            return
false;
        }

        if (
$rootElement->getName() != 'language' || (string)$rootElement['title'] === '')
        {
           
$error = \XF::phrase('provided_file_is_not_valid_language_xml');
            return
false;
        }

        if ((string)
$rootElement['export_version'] != (string)Export::EXPORT_VERSION_ID)
        {
           
$error = \XF::phrase('this_language_xml_file_was_not_built_for_this_version_of_xenforo');
            return
false;
        }

        return
true;
    }

    public function
isValidConfiguration(\SimpleXMLElement $document, &$errors = null)
    {
       
$errors = [];

       
$addOnId = (string)$document['addon_id'];

        if (
$addOnId && $addOnId != 'XF')
        {
           
$addOn = $this->app->addOnManager()->getById($addOnId);
            if (!
$addOn)
            {
               
$errors['addon_id'] = \XF::phrase('xml_file_relates_add_on_not_installed_install_first');
               
$expectedVersionId = null;
            }
            else
            {
               
$expectedVersionId = $addOn->version_id;
            }
        }
        else
        {
           
$expectedVersionId = \XF::$versionId;
        }

       
$baseVersionId = (int)$document['base_version_id'];

        if (
$expectedVersionId && $baseVersionId)
        {
            if (
$baseVersionId > $expectedVersionId)
            {
               
$errors['version_id'] = \XF::phrase('xml_file_based_on_newer_version_than_installed');
            }
        }

        if (
$this->overwriteLanguage)
        {
           
$languageCode = (string)$document['language_code'];
            if (
$languageCode != $this->overwriteLanguage->language_code)
            {
               
$errors['language_code'] = \XF::phrase('locale_of_language_importing_differs_overwriting_is_correct');
            }
        }

        return (
count($errors) == 0);
    }

    public function
importFromXml(\SimpleXMLElement $document)
    {
       
$db = $this->db();
       
$db->beginTransaction();

       
$addOnId = (string)$document['addon_id'];

       
$language = $this->getTargetLanguage($document);

       
/** @var \XF\Service\Phrase\Import $phraseImporter */
       
$phraseImporter = $this->service('XF:Phrase\Import', $language);
       
$phraseImporter->importFromXml($document, $addOnId);

       
$db->commit();

        return
$language;
    }

    protected function
getTargetLanguage(\SimpleXMLElement $document)
    {
        if (
$this->overwriteLanguage)
        {
            return
$this->overwriteLanguage;
        }
        else
        {
           
$language = $this->em()->create('XF:Language');
           
$language->title = (string)$document['title'];
           
$language->parent_id = $this->parentLanguage ? $this->parentLanguage->language_id : 0;
           
$language->date_format = (string)$document['date_format'];
           
$language->time_format = (string)$document['time_format'];
           
$language->currency_format = (string)$document['currency_format'];
           
$language->week_start = (string)$document['week_start'];
           
$language->decimal_point = (string)$document['decimal_point'];
           
$language->thousands_separator = (string)$document['thousands_separator'];
           
$language->label_separator = (string)$document['label_separator'];
           
$language->comma_separator = (string)$document['comma_separator'];
           
$language->ellipsis = (string)$document['ellipsis'];
           
$language->parenthesis_open = (string)$document['parenthesis_open'];
           
$language->parenthesis_close = (string)$document['parenthesis_close'];
           
$language->language_code = (string)$document['language_code'];
           
$language->text_direction = (string)$document['text_direction'] ?: 'LTR';

            if (isset(
$document['user_selectable']))
            {
               
$language->user_selectable = (string)$document['user_selectable'] === '1';
            }

           
$language->save(true, false);

            return
$language;
        }
    }
}