2025-02-24 19:22:01 +03:00
|
|
|
<?php
|
|
|
|
namespace taskman;
|
|
|
|
use Exception;
|
|
|
|
|
|
|
|
class ConfigScanResult
|
|
|
|
{
|
|
|
|
/*var array<string, string[]>*/
|
|
|
|
public array $base_dir2files = array();
|
|
|
|
|
|
|
|
function isEmpty() : bool
|
|
|
|
{
|
|
|
|
return empty($this->base_dir2files);
|
|
|
|
}
|
|
|
|
|
|
|
|
function count() : int
|
|
|
|
{
|
|
|
|
$total = 0;
|
|
|
|
foreach($this->base_dir2files as $base_dir => $files)
|
|
|
|
$total += count($files);
|
|
|
|
return $total;
|
|
|
|
}
|
|
|
|
|
|
|
|
function apply(callable $fn)
|
|
|
|
{
|
|
|
|
foreach($this->base_dir2files as $base_dir => $files)
|
|
|
|
$this->base_dir2files[$base_dir] = $fn($base_dir, $files);
|
|
|
|
}
|
|
|
|
|
|
|
|
function filter(callable $filter)
|
|
|
|
{
|
|
|
|
foreach($this->base_dir2files as $base_dir => $files)
|
|
|
|
$this->base_dir2files[$base_dir] = array_filter($files, $filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
function forEachFile(callable $fn)
|
|
|
|
{
|
|
|
|
foreach($this->base_dir2files as $base_dir => $files)
|
|
|
|
{
|
|
|
|
foreach($files as $file)
|
|
|
|
$fn($base_dir, $file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function add(string $base_dir, string $file)
|
|
|
|
{
|
|
|
|
if(!isset($this->base_dir2files[$base_dir]))
|
|
|
|
$this->base_dir2files[$base_dir] = array();
|
|
|
|
|
|
|
|
$this->base_dir2files[$base_dir][] = $file;
|
|
|
|
}
|
|
|
|
|
|
|
|
//returns [[base_dir, file1], [base_dir, file2], ...]
|
|
|
|
function getFlatArray() : array
|
|
|
|
{
|
|
|
|
$flat = [];
|
|
|
|
foreach($this->base_dir2files as $base_dir => $files)
|
|
|
|
{
|
|
|
|
foreach($files as $file)
|
|
|
|
$flat[] = [$base_dir, $file];
|
|
|
|
}
|
|
|
|
return $flat;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getAllFiles() : array
|
|
|
|
{
|
|
|
|
$all_files = [];
|
|
|
|
foreach($this->base_dir2files as $base_dir => $files)
|
|
|
|
$all_files = array_merge($all_files, $files);
|
|
|
|
|
|
|
|
return $all_files;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function config_scan_files(
|
|
|
|
array $base_dirs,
|
|
|
|
string $ext_filter = '.conf.js',
|
|
|
|
bool $verbose = false
|
|
|
|
) : ConfigScanResult
|
|
|
|
{
|
|
|
|
$t = microtime(true);
|
|
|
|
|
|
|
|
$result = new ConfigScanResult();
|
|
|
|
|
|
|
|
foreach($base_dirs as $base_dir)
|
|
|
|
{
|
|
|
|
$result->base_dir2files[$base_dir] =
|
|
|
|
scan_files_rec(array($base_dir), array($ext_filter));
|
|
|
|
}
|
|
|
|
|
|
|
|
if($verbose)
|
2025-02-25 15:48:28 +03:00
|
|
|
config_log("File scan: {$result->count()}, done " . round(microtime(true) - $t,2) . " sec.");
|
2025-02-24 19:22:01 +03:00
|
|
|
|
|
|
|
return $result;
|
|
|
|
}
|