Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Job/AddOnUninstallData.php
<?php

namespace XF\Job;

class
AddOnUninstallData extends AbstractJob
{
    protected
$defaultData = [
       
'addon_id' => null,
       
'data_types' => null,
       
'current_type' => null,
    ];

    protected
$currentType = null;

    public function
run($maxRunTime)
    {
        if (
$this->data['addon_id'] == 'XF')
        {
            return
$this->complete();
        }

       
$dataManager = $this->app->addOnDataManager();
       
$addOnId = $this->data['addon_id'];

        if (
$this->data['data_types'] === null)
        {
           
$dataTypes = $dataManager->getDataTypeClasses();
           
$this->data['data_types'] = $dataTypes;
        }

       
$start = microtime(true);

        do
        {
            if (!
$this->data['current_type'])
            {
               
$this->data['current_type'] = array_shift($this->data['data_types']);
                if (!
$this->data['current_type'])
                {
                   
$dataManager->finalizeRemoveAddOnData($addOnId);

                    return
$this->complete();
                }
            }

           
$type = $this->data['current_type'];
           
$this->currentType = $type;

           
$handler = $dataManager->getDataTypeHandler($type);

           
$timeLeft = max(1, $maxRunTime - (microtime(true) - $start));
           
$isComplete = $handler->deleteAddOnData($addOnId, $timeLeft);
            if (
$isComplete)
            {
               
$this->data['current_type'] = null;
            }

            \
XF::triggerRunOnce();

            if (
microtime(true) - $start >= $maxRunTime)
            {
                break;
            }
        }
        while (
$this->data['data_types']);

        return
$this->resume();
    }

    public function
getStatusMessage()
    {
       
// TODO: These (and the types) probably should be phrased
       
$actionPhrase = 'Deleting';
       
$typePhrase = 'Add-on data';

       
$currentType = ucfirst(str_replace('_', ' ', $this->currentType));

         if (
$currentType)
        {
            return
sprintf('%s... %s (%s)', $actionPhrase, $typePhrase, $currentType);
        }
        else
        {
            return
sprintf('%s... %s', $actionPhrase, $typePhrase);
        }
    }

    public function
canCancel()
    {
        return
false;
    }

    public function
canTriggerByChoice()
    {
        return
false;
    }
}