Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Service/Smilie/Export.php
<?php

namespace XF\Service\Smilie;

use
XF\Mvc\Entity\Finder;
use
XF\Service\AbstractXmlExport;
use
XF\Util\Arr;
use
XF\Util\Xml;

use function
count;

class
Export extends AbstractXmlExport
{
    public function
getRootName()
    {
        return
'smilies_export';
    }

    public function
export(Finder $smilies)
    {
       
$smilies = $smilies->fetch();

        if (
$smilies->count())
        {
           
$smilieCategories = $this->finder('XF:SmilieCategory')
                ->
with('MasterTitle')
                ->
order(['display_order'])
                ->
where('smilie_category_id', $smilies->pluckNamed('smilie_category_id'));

            return
$this->exportFromArray($smilies->toArray(), $smilieCategories->fetch()->toArray());
        }
        else
        {
           
$this->throwNoSmiliesError();
        }
    }

   
/**
     * This method allows the normal smilie export to be called on an array of smilies
     * that don't necessarily come from the database, such as from an import.
     *
     * @param array $smilies (including 'title' from phrase)
     * @param array $smilieCategories (including 'title' from phrase)
     *
     * @return \DOMDocument
     */
   
public function exportFromArray(array $smilies, array $smilieCategories)
    {
       
$document = $this->createXml();
       
$rootNode = $document->createElement($this->getRootName());
       
$document->appendChild($rootNode);

        if (
count($smilies))
        {
           
$smiliesNode = $document->createElement('smilies');
            foreach (
$smilies AS $smilie)
            {
               
$smilieNode = $document->createElement('smilie');

                if (
$smilie['smilie_category_id'])
                {
                   
$smilieNode->setAttribute('smilie_category_id', $smilie['smilie_category_id']);
                }

               
$smilieNode->setAttribute('title', $smilie['title']);

               
$smilieNode->appendChild(Xml::createDomElement($document, 'image_url', $smilie['image_url']));
               
$smilieNode->appendChild(Xml::createDomElement($document, 'image_url_2x', $smilie['image_url_2x']));

                if (
$smilie['sprite_mode'])
                {
                   
$spriteParamsNode = $document->createElement('sprite_params');

                    foreach (
$smilie['sprite_params'] AS $param => $value)
                    {
                       
$spriteParamsNode->setAttribute($param, $value);
                    }

                   
$smilieNode->appendChild($spriteParamsNode);
                }

                foreach (
Arr::stringToArray($smilie['smilie_text'], '/\r?\n/') AS $smilieText)
                {
                   
$smilieNode->appendChild(Xml::createDomElement($document, 'smilie_text', $smilieText));
                }

               
$smilieNode->setAttribute('display_order', $smilie['display_order']);
               
$smilieNode->setAttribute('display_in_editor', $smilie['display_in_editor']);

               
$smiliesNode->appendChild($smilieNode);
            }

           
$categoriesNode = $document->createElement('smilie_categories');

            foreach (
$smilieCategories AS $smilieCategory)
            {
               
$categoryNode = $document->createElement('smilie_category');
               
$categoryNode->setAttribute('id', $smilieCategory['smilie_category_id']);
               
$categoryNode->setAttribute('title', $smilieCategory['title']);
               
$categoryNode->setAttribute('display_order', $smilieCategory['display_order']);

               
$categoriesNode->appendChild($categoryNode);
            }

           
$rootNode->appendChild($categoriesNode);
           
$rootNode->appendChild($smiliesNode);

            return
$document;
        }
        else
        {
           
$this->throwNoSmiliesError();
        }
    }

    protected function
throwNoSmiliesError()
    {
        throw new \
XF\PrintableException(\XF::phrase('please_select_at_least_one_smilie_to_export')->render());
    }

   
/**
     * @return \XF\Repository\SmilieCategory
     */
   
protected function getSmilieCategoryRepo()
    {
        return
$this->repository('XF:SmilieCategory');
    }
}