Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/ControllerPlugin/DisplayOrder.php
<?php

namespace XF\ControllerPlugin;

class
DisplayOrder extends AbstractPlugin
{
    public function
actionOrder($identifier, $displayOrderColumn = 'display_order', array $options = [])
    {
       
$this->assertPostOnly();

       
$this->order($identifier, $displayOrderColumn, $options);

        return
$this->message(\XF::phrase('your_changes_have_been_saved'));
    }

    public function
order($identifier, $displayOrderColumn = 'display_order', array $options = [])
    {
       
$options = array_replace([
           
'input' => null,
           
'fastUpdate' => true,
           
'preSaveCallback' => null,
        ],
$options);

        if (!
$options['input'])
        {
           
$options['input'] = $displayOrderColumn;
        }

       
$displayOrderInput = $this->request->filter($options['input'], 'array');
       
$entities = $this->em->findByIds($identifier, $displayOrderInput);

       
$orderValue = 0;
        foreach (
$displayOrderInput AS $id)
        {
            if (
$entity = $entities[$id] ?? null)
            {
               
$orderValue += 10;

                if (
$entity->getExistingValue($displayOrderColumn) != $orderValue)
                {
                    if (
$options['fastUpdate'] && !$options['preSaveCallback'])
                    {
                       
$entity->fastUpdate($displayOrderColumn, $orderValue);
                    }
                    else
                    {
                       
$entity->$displayOrderColumn = $orderValue;
                        if (
$options['preSaveCallback'])
                        {
                           
$cb = $options['preSaveCallback'];
                           
$cb($entity);
                        }
                       
$entity->save();
                    }
                }
            }
        }
    }
}