Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Entity/FileCheck.php
<?php

namespace XF\Entity;

use
XF\Mvc\Entity\Entity;
use
XF\Mvc\Entity\Structure;
use
XF\Util\File;

use function
is_array;

/**
 * COLUMNS
 * @property int|null $check_id
 * @property int $check_date
 * @property string $check_state
 * @property string $check_hash
 * @property int $total_missing
 * @property int $total_inconsistent
 * @property int $total_checked
 *
 * GETTERS
 * @property array|null $results
 */
class FileCheck extends Entity
{
    public function
getAbstractedCheckPath($temp = false)
    {
       
$tempPrefix = $temp ? 'temp-' : '';

        return
"internal-data://file_check/{$tempPrefix}file-check-{$this->check_id}.json";
    }

   
/**
     * @return array|null
     */
   
public function getResults()
    {
        if (
$this->check_state == 'pending')
        {
            return
null;
        }

       
$fs = $this->app()->fs();
       
$path = $this->getAbstractedCheckPath();

        if (
$fs->has($path))
        {
           
$contents = $fs->read($path);
           
$json = @json_decode($contents, true);
            return
is_array($json) ? $json : null;
        }
        else
        {
            return
null;
        }
    }

    protected function
_postSave()
    {
        if (
$this->isUpdate() && $this->isChanged('check_state') && $this->getExistingValue('check_state') == 'pending')
        {
           
// was pending, remove the temp file
           
\XF\Util\File::deleteFromAbstractedPath($this->getAbstractedCheckPath(true));
        }
    }

    protected function
_postDelete()
    {
       
File::deleteFromAbstractedPath($this->getAbstractedCheckPath());
    }

    public static function
getStructure(Structure $structure)
    {
       
$structure->table = 'xf_file_check';
       
$structure->shortName = 'XF:FileCheck';
       
$structure->primaryKey = 'check_id';
       
$structure->columns = [
           
'check_id' => ['type' => self::UINT, 'autoIncrement' => true, 'nullable' => true],
           
'check_date' => ['type' => self::UINT, 'default' => \XF::$time],
           
'check_state' => ['type' => self::STR, 'default' => 'pending',
               
'allowedValues' => ['pending', 'success', 'failure']
            ],
           
'check_hash' => ['type' => self::STR, 'maxLength' => 64, 'default' => ''],
           
'total_missing' => ['type' => self::UINT, 'default' => 0],
           
'total_inconsistent' => ['type' => self::UINT, 'default' => 0],
           
'total_checked' => ['type' => self::UINT, 'default' => 0]
        ];
       
$structure->getters = [
           
'results' => true
       
];
       
$structure->relations = [];

        return
$structure;
    }
}