Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Sitemap/BuildState.php
<?php

namespace XF\Sitemap;

/**
 * @property int $fileSet
 * @property int $fileCount
 * @property int $fileSize
 * @property int $fileEntryCount
 * @property int $totalEntryCount
 * @property array $pendingTypes
 * @property string $currentType
 * @property int $lastTypeId
 * @property bool $coreWritten
 */
class BuildState
{
    protected
$possibleTypes = [];

   
/**
     * @var int
     */
   
protected $fileSet;

   
/**
     * @var int
     */
   
protected $fileCount = 1;

   
/**
     * @var int
     */
   
protected $fileSize = 0;

   
/**
     * @var int
     */
   
protected $fileEntryCount = 0;

   
/**
     * @var int
     */
   
protected $totalEntryCount = 0;

   
/**
     * @var array|null
     */
   
protected $pendingTypes;

   
/**
     * @var string
     */
   
protected $currentType = '';

   
/**
     * @var int
     */
   
protected $lastTypeId = 0;

   
/**
     * @var bool
     */
   
protected $coreWritten = false;

    public function
__construct(array $possibleTypes)
    {
       
$this->possibleTypes = $possibleTypes;
    }

    public function
getFileSet()
    {
        if (!
$this->fileSet)
        {
           
$this->fileSet = \XF::$time;
        }

        return
$this->fileSet;
    }

    public function
getPendingTypes()
    {
        if (
$this->pendingTypes === null)
        {
           
$this->pendingTypes = array_keys($this->possibleTypes);
        }

        return
$this->pendingTypes;
    }

    public function
getNextType()
    {
       
$pendingTypes = $this->getPendingTypes();
        if (!
$pendingTypes)
        {
            return
'';
        }

        return
array_shift($this->pendingTypes);
    }

    public function
getActiveType()
    {
        while (!
$this->currentType || !isset($this->possibleTypes[$this->currentType]))
        {
           
$this->currentType = $this->getNextType();
           
$this->lastTypeId = 0;

            if (!
$this->currentType)
            {
               
// nothing left
               
break;
            }
        }

        return
$this->currentType;
    }

    public function
resetCurrentType()
    {
       
$this->currentType = '';
       
$this->lastTypeId = 0;
    }

    public function
entryAdded()
    {
       
$this->fileEntryCount++;
       
$this->totalEntryCount++;
    }

    public function
incrementFile()
    {
       
$this->fileCount++;
       
$this->fileSize = 0;
       
$this->fileEntryCount = 0;
    }

    public function
__get($key)
    {
       
$getter = 'get' . $key;
        if (
method_exists($this, $getter))
        {
            return
$this->{$getter}();
        }
        else if (
property_exists($this, $key))
        {
            return
$this->{$key};
        }
        else
        {
            throw new \
InvalidArgumentException("Unknown build state field '$key'");
        }
    }

    public function
__set($key, $value)
    {
        if (
property_exists($this, $key))
        {
           
$this->{$key} = $value;
        }
        else
        {
            throw new \
InvalidArgumentException("Unknown build state field '$key'");
        }
    }
}