Classes List

frdlweb\Api\Rpc\SchemaLoader

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 
 84 
 85 
 86 
 87 
 88 
 89 
 90 
 91 
 92 
 93 
 94 
 95 
 96 
 97 
 98 
 99 
 100 
 101 
 102 
 103 
 104 
<?php
declare(strict_types=1);

namespace frdlweb\Api\Rpc;

use Opis\JsonSchema\Loaders\File;
use Opis\JsonSchema\Schema;

class SchemaLoader extends File
{
    /** @var string[] */
    protected $dirs;
    /** @var string */
    protected $prefix;
    /** @var int */
    protected $prefixLength;

protected $cacheDir;
    /** * File constructor. * @param string $prefix * @param string[] $dirs */
    public function __construct(string $prefix = ''array $dirs,string $cacheDir = null)
    {


        $this->dirs = $dirs;
        $this->prefix = $prefix;
        $this->prefixLength = strlen($prefix);
if(!$cacheDir){
   $cacheDir = sys_get_temp_dir() . \DIRECTORY_SEPARATOR . get_current_user(). \DIRECTORY_SEPARATOR . 'json-schema-store' . \DIRECTORY_SEPARATOR;
}
$this->cacheDir = $cacheDir;

    }


public function prueCache(int $limit = 86400$removeDir = false$skipDotFiles = true){
return \webfan\hps\patch\Fs::pruneDir($this->cacheDir$limit$skipDotFiles$removeDir);
}

public function filepath($uri){
   $path = str_replace(['http://''https://''/'], ['','',\DIRECTORY_SEPARATOR], $uri);
   return rtrim($this->cacheDir\DIRECTORY_SEPARATOR.'/ ').\DIRECTORY_SEPARATOR.$path;
}
    /** * @inheritDoc */
    public function loadSchema(string $uri)
    {
        if (isset($this->schemas[$uri])) {
            return $this->schemas[$uri];
        }
        if ($this->prefixLength !== 0 && strpos($uri$this->prefix!== 0) {
            return null;
        }
        $path = substr($uri$this->prefixLength);


        $schema = null;


$cacheFile = $this->filepath($uri);


if(file_exists($cacheFile&& is_file($cacheFile)){
               $schema = json_decode(file_get_contents($cacheFile), false);
               $schema = new Schema($schema$uri);
}

 if(null === $schema){
        foreach ($this->dirs as $dir) {
            if (file_exists($dir . $path)) {
                $schema = json_decode(file_get_contents($dir . $path), false);
                $schema = new Schema($schema$uri);
                break;
            }
        }
 }


 if(null === $schema){

 $c = file_get_contents($uri);
 if(false!==$c){
if(!is_dir(dirname($cacheFile))){
   mkdir($cacheFile0755true);
}
file_put_contents($cacheFile$c); 
                    $schema = json_decode($cfalse);
                    $schema = new Schema($schema$uri);  
 }
 }




        $this->schemas[$uri] = $schema;
        return $schema;
    }
}