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

namespace XF\ControllerPlugin;

class
Toggle extends AbstractPlugin
{
    public function
actionToggle($identifier, $column = 'active', array $options = [])
    {
       
$this->assertPostOnly();

       
$this->toggle($identifier, $column, $options);

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

    public function
toggle($identifier, $column = 'active', array $options = [])
    {
       
$options = array_replace([
           
'input' => null,
           
'preSaveCallback' => null
       
], $options);

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

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

        foreach (
$entities AS $id => $entity)
        {
            if (
$entity->getExistingValue($column) != $activeState[$id])
            {
               
$entity->{$column} = $activeState[$id];

                if (
$options['preSaveCallback'])
                {
                   
$cb = $options['preSaveCallback'];
                   
$cb($entity);
                }

               
$entity->save();
            }
        }
    }
}