📋 Commit iniziale con: - ✅ Documentazione unificata in docs/ - ✅ Codice Laravel in netgescon-laravel/ - ✅ Script automazione in scripts/ - ✅ Configurazione sync rsync - ✅ Struttura organizzata e pulita 🔄 Versione: 2025.07.19-1644 🎯 Sistema pronto per Git distribuito
149 lines
3.6 KiB
PHP
Executable File
149 lines
3.6 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Illuminate\View\Compilers;
|
|
|
|
use ErrorException;
|
|
use Illuminate\Filesystem\Filesystem;
|
|
use Illuminate\Support\Str;
|
|
use InvalidArgumentException;
|
|
|
|
abstract class Compiler
|
|
{
|
|
/**
|
|
* The filesystem instance.
|
|
*
|
|
* @var \Illuminate\Filesystem\Filesystem
|
|
*/
|
|
protected $files;
|
|
|
|
/**
|
|
* The cache path for the compiled views.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $cachePath;
|
|
|
|
/**
|
|
* The base path that should be removed from paths before hashing.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $basePath;
|
|
|
|
/**
|
|
* Determines if compiled views should be cached.
|
|
*
|
|
* @var bool
|
|
*/
|
|
protected $shouldCache;
|
|
|
|
/**
|
|
* The compiled view file extension.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $compiledExtension = 'php';
|
|
|
|
/**
|
|
* Indicates if view cache timestamps should be checked.
|
|
*
|
|
* @var bool
|
|
*/
|
|
protected $shouldCheckTimestamps;
|
|
|
|
/**
|
|
* Create a new compiler instance.
|
|
*
|
|
* @param \Illuminate\Filesystem\Filesystem $files
|
|
* @param string $cachePath
|
|
* @param string $basePath
|
|
* @param bool $shouldCache
|
|
* @param bool $shouldCheckTimestamps
|
|
* @param string $compiledExtension
|
|
*
|
|
* @throws \InvalidArgumentException
|
|
*/
|
|
public function __construct(
|
|
Filesystem $files,
|
|
$cachePath,
|
|
$basePath = '',
|
|
$shouldCache = true,
|
|
$compiledExtension = 'php',
|
|
$shouldCheckTimestamps = true,
|
|
) {
|
|
if (! $cachePath) {
|
|
throw new InvalidArgumentException('Please provide a valid cache path.');
|
|
}
|
|
|
|
$this->files = $files;
|
|
$this->cachePath = $cachePath;
|
|
$this->basePath = $basePath;
|
|
$this->shouldCache = $shouldCache;
|
|
$this->compiledExtension = $compiledExtension;
|
|
$this->shouldCheckTimestamps = $shouldCheckTimestamps;
|
|
}
|
|
|
|
/**
|
|
* Get the path to the compiled version of a view.
|
|
*
|
|
* @param string $path
|
|
* @return string
|
|
*/
|
|
public function getCompiledPath($path)
|
|
{
|
|
return $this->cachePath.'/'.hash('xxh128', 'v2'.Str::after($path, $this->basePath)).'.'.$this->compiledExtension;
|
|
}
|
|
|
|
/**
|
|
* Determine if the view at the given path is expired.
|
|
*
|
|
* @param string $path
|
|
* @return bool
|
|
*
|
|
* @throws \ErrorException
|
|
*/
|
|
public function isExpired($path)
|
|
{
|
|
if (! $this->shouldCache) {
|
|
return true;
|
|
}
|
|
|
|
$compiled = $this->getCompiledPath($path);
|
|
|
|
// If the compiled file doesn't exist we will indicate that the view is expired
|
|
// so that it can be re-compiled. Else, we will verify the last modification
|
|
// of the views is less than the modification times of the compiled views.
|
|
if (! $this->files->exists($compiled)) {
|
|
return true;
|
|
}
|
|
|
|
if (! $this->shouldCheckTimestamps) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
return $this->files->lastModified($path) >=
|
|
$this->files->lastModified($compiled);
|
|
} catch (ErrorException $exception) {
|
|
if (! $this->files->exists($compiled)) {
|
|
return true;
|
|
}
|
|
|
|
throw $exception;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create the compiled file directory if necessary.
|
|
*
|
|
* @param string $path
|
|
* @return void
|
|
*/
|
|
protected function ensureCompiledDirectoryExists($path)
|
|
{
|
|
if (! $this->files->exists(dirname($path))) {
|
|
$this->files->makeDirectory(dirname($path), 0777, true, true);
|
|
}
|
|
}
|
|
}
|