Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/AddOn/DataType/Option.php
<?php

namespace XF\AddOn\DataType;

use
XF\Util\Xml;

use function
strlen;

class
Option extends AbstractDataType
{
    public function
getShortName()
    {
        return
'XF:Option';
    }

    public function
getContainerTag()
    {
        return
'options';
    }

    public function
getChildTag()
    {
        return
'option';
    }

    public function
exportAddOnData($addOnId, \DOMElement $container)
    {
       
$entries = $this->finder()
            ->
where('addon_id', $addOnId)
            ->
order('option_id')->fetch();

       
$doc = $container->ownerDocument;

        foreach (
$entries AS $entry)
        {
           
$node = $doc->createElement($this->getChildTag());

           
$this->exportMappedAttributes($node, $entry);
           
$node->appendChild(Xml::createDomElement($doc, 'default_value', $entry->getValue('default_value')));
            if (
$entry->edit_format_params !== '')
            {
               
$node->appendChild(Xml::createDomElement($doc, 'edit_format_params', $entry->edit_format_params));
            }
            if (
$entry->sub_options)
            {
               
$node->appendChild(Xml::createDomElement($doc, 'sub_options', implode("\n", $entry->sub_options)));
            }

            foreach (
$entry->Relations AS $relation)
            {
               
$relationNode = $doc->createElement('relation');
               
$relationNode->setAttribute('group_id', $relation->group_id);
               
$relationNode->setAttribute('display_order', $relation->display_order);
               
$node->appendChild($relationNode);
            }

           
$container->appendChild($node);
        }

        return
$entries->count() ? true : false;
    }

    public function
importAddOnData($addOnId, \SimpleXMLElement $container, $start = 0, $maxRunTime = 0)
    {
       
$startTime = microtime(true);

       
$entries = $this->getEntries($container, $start);
        if (!
$entries)
        {
            return
false;
        }

       
$ids = $this->pluckXmlAttribute($entries, 'option_id');
       
$existing = $this->findByIds($ids);

       
$i = 0;
       
$last = 0;
        foreach (
$entries AS $entry)
        {
           
$id = $ids[$i++];

            if (
$i <= $start)
            {
                continue;
            }

           
/** @var \XF\Entity\Option $entity */
           
$entity = $existing[$id] ?? $this->create();

           
$entity->setOptions([
               
'verify_validation_callback' => false,
               
'verify_value' => false
           
]);
           
$entity->getBehavior('XF:DevOutputWritable')->setOption('write_dev_output', false);
           
$this->importMappedAttributes($entry, $entity);
           
$entity->addon_id = $addOnId;
           
$entity->default_value = (string)$entry->default_value;
           
$entity->edit_format_params = (string)$entry->edit_format_params;

           
$subOptions = (string)$entry->sub_options;
           
$entity->sub_options = strlen($subOptions) ? explode("\n", $subOptions) : [];

           
$entity->save(true, false);

           
$relations = [];
            foreach (
$entry->relation AS $relation)
            {
               
$relations[(string)$relation['group_id']] = (string)$relation['display_order'];
            }

           
$entity->updateRelations($relations);

            if (
$this->resume($maxRunTime, $startTime))
            {
               
$last = $i;
                break;
            }
        }
        return (
$last ?: false);
    }

    public function
deleteOrphanedAddOnData($addOnId, \SimpleXMLElement $container)
    {
       
$this->deleteOrphanedSimple($addOnId, $container, 'option_id');
    }

    protected function
getMappedAttributes()
    {
        return [
           
'option_id',
           
'edit_format',
           
'data_type',
           
'validation_class',
           
'validation_method',
           
'advanced'
       
];
    }
}